2016-07-25 20 views
0

Im Moment mache ich ein Powershell-Skript in Powershell ISE, das für die Eingabe aller Server verwendet wird, die wir hosten, und alle Benutzer von den Servern ActiveDirectory holen. Dazu muss ich mich automatisch mit allen Servern verbinden (es gibt viele Server, aber nur 42, auf die wir zugreifen müssen). Lassen Sie mich erklären, was ich bisher gemacht habe und was das eigentliche Problem ist.Automatisches Eingeben des Passworts in enter-pssession

So wie Sie wissen, gibt es viele verschiedene Server, so mussten wir alle Server-IP: S/Benutzernamen/Passwörter aus einer Excel-Datei, die ein Kollege gemacht, lesen und sie dann in Arrays platzieren.

Von dort haben wir eine for-Schleife wie folgt aussehen:

for ($S = 0; $ -le $ServerAdressArray.Length; $S++) 
{ 

    if ($ServerAdressArray[$S] -like '192.168.*.10') 
    { 
     GetData($S) 
    } 

} 

Was sie tut, ist durch das Feld gehen alle lokalen Ausfiltern IP-Adressen aus dem Array, wenn es eine lokale IP-Adresse findet es läuft die GetData-Funktion, die im Moment wie folgt aussieht:

function GetData([int]$arg1) 
{ 
    Enter-PSsession -ComputerName $ServerAdressArray[$arg1] -Credential $UsernamesArray[$arg1] $PasswordArray[$arg1] 
} 

Was ich will, ist zu tun, um die Zeilennummer zu verwenden, um die lokale IP-Adresse auf und dann diese Nummer zu verwenden, fand die richtigen zu finden Benutzername und Passwort, um sich mit diesem bestimmten Server anzumelden.

Das Problem ist, ich muss das Passwort in Powershell für jeden einzigen Server eingeben. Und ich möchte es nur in der gleichen Zeile eingeben wie Enter-PSSession.

Wenn Sie genauere Informationen wünschen, lassen Sie es mich wissen. Außerdem bin ich neu bei dieser Art von Skripten, also wenn Sie so kalt wie möglich in Ihren Erklärungen sind, wäre das großartig :)

Vielen Dank.

Antwort

2

Das Problem hier ist, wie Sie den Parameter "Credential" übergeben. Es sollte vom Typ PSCredential sein.

Angenommen, Sie die Benutzername und das Passwort im Klartext in der Datei gespeichert haben Sie direkt ein Berechtigungsnachweis-Objekt erstellen können:

New-Object PSCredential -ArgumentList @("a", ("p"|ConvertTo-SecureString -AsPlainText -Force)) 

Für Ihr Beispiel:

Enter-PSsession -ComputerName $ServerAdressArray[$arg1] -Credential (New-object PSCredential -ArgumentList @($UsernamesArray[$arg1], ($PasswordArray[$arg1]|ConvertTo-secureString -AsPlainText -Force))) 

jedoch; Wenn Sie daran interessiert sind, einige Daten für jeden Server an den ausführenden Host zurückzugeben (z. B. für die weitere Verarbeitung), möchten Sie die Sitzung nicht eingeben, sondern stattdessen Invoke-Befehl verwenden.

z.

Invoke-command -ComputerName $ServerAdressArray[$arg1] -Credential (New-object PSCredential -ArgumentList @($UsernamesArray[$arg1], ($PasswordArray[$arg1]|ConvertTo-secureString -AsPlainText -Force))) -Scriptblock $scriptblockToExecute 
0

Hallo CmdrTchort/Richard (: P). Danke für die Antwort!

Alle Passwörter im Excelfile sind aus Sicherheitsgründen verschlüsselt. Ich arbeite derzeit an einer Funktion, die das Passwort vor der Verwendung entschlüsseln wird.

Ich habe um ein bisschen mehr im Internet geschaut und ich auf diesen Beitrag gestolpert: Using PowerShell credentials without being prompted for a password

Ich habe versucht, was Jeroen Landheer sagte und die Funktion sieht nun wie folgt aus:

function GetData(int[$arg1]) 
{ 
    $secstr = New-Object -TypeName System.Security.Securestring 
    $PasswordArray[$arg1].ToCharArray() | ForEach-Object {$secstr.AppendChar($_)} 
    $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr 

    $session = new-pssession -computername $ServerAdressArray[$arg1] -credential $UserNameArray[$arg1] $PasswordArray[$arg1] 
} 

Die Es erscheint eine Eingabeaufforderung, so dass das Passwort nicht automatisch ausgefüllt wurde und wenn ich die Eingabeaufforderung (n) schließe. Ich erhalte diesen Fehler:

New-PSSession: Ein Positionsparameter, der das Argument '(encryptedpassword)' akzeptiert, kann nicht gefunden werden. Bei C: \ xxxxxxx \ xxxxx \ xxxxxx \ superfl.ps1: 109 char: 16 + ... $ session = neuer-psession -computername $ ServerAdressArray [$ arg1] -cr ... + ~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~ + CategoryInfo: InvalidArgument: (:) [New-PSSession], ParameterBindingException + FullyQualifiedErrorId: PositionalParameterNotFound, Microsoft.PowerShell.Commands.NewPSSessionCommand

muss ich irgendeine Art von Positionsparameter eingeben oder tut es jetzt arbeiten weil es verschlüsselt ist?

+0

'-credential $ cred' –

+0

Funktioniert nicht Mathias – tTim

+0

Kann keine Verbindung zum Remote-Server herstellen: Zugriff verweigert – tTim