2016-07-14 18 views
0

Ich lauerte seit Jahren greifen Code-Antworten von dieser Website, aber das ist mein erstes Mal, tatsächlich eine Frage zu stellen. Ich werde eigentlich nicht für Code bezahlt, sondern benutze Skripte, um Routineaufgaben zu erleichtern.Powershell durch Server-Liste mit Anmeldeinformationen iterieren

Ich habe einen Powershell-Skript mit dem folgenden Code unter Verwendung von (dass ich ziemlich viel von dieser Seite zu entnehmen) Festplattennutzung auf dem Client-Server zu sammeln:

$dataColl = @()#Makes an array, or a collection to hold all the object of the same fields 

foreach ($serverName in (get-content c:\reporting\Disk_useage\My_servers.txt)) 

{ 

    $path = “\\$serverName\d$\folder1\TargetSubdir“ 

    $dirSize = Get-ChildItem $path -recurse -force | select Length |Measure-Object -Sum length 

    $dirSize.sum = $dirSize.sum/1MB 

    $finalResult = “{0:N2} MB” -f $dirsize.sum 

    $dataObject = New-Object PSObject 

    Add-Member -inputObject $dataObject -memberType NoteProperty -name “ServerName” -value $serverName 

    Add-Member -inputObject $dataObject -memberType NoteProperty -name “Dir_Size” -value $finalResult 

    $dataColl += $dataObject 

    $dataObject 

} 

$dataColl | Export-Csv -noTypeInformation -path c:\reporting\Disk_useage\Svr_disk.csv 

Das ist fein gearbeitet, aber wir jetzt habe eine zweite Domäne mit Client-Servern, also muss ich Anmeldeinformationen für Server in der 2. Domäne hinzufügen. Ich habe schon Möglichkeiten der Erforschung Anmeldeinformationen übergeben entlang, und bekam dieses Stück Code (PW bereits in der TXT-Datei gespeichert wurde):

$username = "MyDomain\MyAccount" 
$password = cat C:\reporting\securestring.txt | convertto-securestring 
$cred = new-object -typename System.Management.Automation.PSCredential ` 
    -argumentlist $username, $password 

Aber ich diese Parameter irgendwo hinzufügen soll tatsächlich nutzen die Anmeldeinformationen, die eingerichtet wurden:

-Authentication default -Credential $Cred 

Ich habe es in mehreren verschiedenen Spots ohne Erfolg versucht. Zu Ihrer Information, die Liste in My_servers.txt enthält eine Reihe von Servern, für die ich KEINE Anmeldedaten benötige (da sie sich auf der aktuellen Domain befinden), und eine Reihe von Servern, auf denen ich Anmeldeinformationen benötige (weil sie sich in einer anderen Domain befinden). . Aber die Anmeldeinformationen, die ich für das Skript verwende, sind für ein Dienstkonto, das in beiden Domänen mit derselben ID/PW vorhanden ist. Jede Hilfe bei der Sortierung wäre sehr willkommen.

+0

haben Sie WinRM konfiguriert, können Sie aufrufen-Befehl {d: \ Ordner1 \ targetsubdir} -credential $ yourcredentials etc dies anders zu behandeln? Wenn nicht, könnten Sie vielleicht versuchen, die Laufwerke zu mappen? –

+0

Ich sehe nicht, wie ich das übernehmen würde. Wie gesagt, ich bin kein Coder von Beruf, also brauche ich genauere Ratschläge. –

Antwort

0

Adil Vorschlag im Code wäre:

$dataColl = @()#Makes an array, or a collection to hold all the object of the same fields 
$username = "MyDomain\MyAccount" 
$password = Get-Content C:\reporting\securestring.txt | convertto-securestring 
$cred = New-Object -typename System.Management.Automation.PSCredential ` 
    -argumentlist $username, $password 
foreach ($serverName in (get-content c:\reporting\Disk_useage\My_servers.txt)) 

{ 
    $dirSize = Invoke-Command -Credential $cred -ComputerName $serverName -ScriptBlock { 
     Get-ChildItem “d:\folder1\TargetSubdir“ -recurse -force | select Length | Measure-Object -Sum length 
    } 
    $dirSize.sum = $dirSize.sum/1MB 

    $finalResult = “{0:N2} MB” -f $dirsize.sum 

    $dataObject = New-Object PSObject 

    Add-Member -inputObject $dataObject -memberType NoteProperty -name “ServerName” -value $serverName 

    Add-Member -inputObject $dataObject -memberType NoteProperty -name “Dir_Size” -value $finalResult 

    $dataColl += $dataObject 

    $dataObject 

} 

$dataColl | Export-Csv -noTypeInformation -path c:\reporting\Disk_useage\Svr_disk.csv