2016-10-31 5 views
1

Die Variable am Anfang des Skripts definiert mehrere Befehle/Variablen für New-PSDrive, sowie Verbindung und Installation. Danach wird eine Funktion erstellt, um eine Textdatei zu öffnen und daraus Informationen zu extrahieren. Ich weiß, dass dieser Teil funktioniert, weil ich ihn in zwei anderen Skripten verwende. Zuletzt führt das Skript die Befehle in der ersten Variablen aus.Programm remote mit Invoke-Command installieren

Das Skript wird als erfolgreich ausgeführt angezeigt, aber die Überprüfung des Remote-Computers zeigt, dass nichts passiert ist.

Vor jedem dieser Tätigkeit hat der Remote-Computer ein Skript ausführen, dagegen zu tun, dass:

  • ermöglicht PSRemoting (Firewall-Regeln und Start WinRM Einstellbetrieb) und
  • umgeht Ausführungsrichtlinien.

Nach diesen Schritten wird das folgende Skript ausgeführt, um eine Software zu installieren.

$eAudIT2014V2Install = { 
    $eAudIT2014V2password = ConvertTo-SecureString "PasswordHere" -AsPlainText -Force 
    $eAudIT2014V2cred = New-Object System.Management.Automation.PSCredential('domain\user', $eAudIT2014V2password) 
    $eAudIT2014V2drive = New-PSDrive -Name eAudIT2014V2 -PSProvider FileSystem -Root "\\Server\Share" -Credential $eAudIT2014V2cred 
    $eAudIT2014V2job = Start-Job {"eAudIT2014V2:\Setup.cmd"} 
    Wait-Job $eAudIT2014V2job 
    Receive-Job $eAudIT2014V2job 
} 

Function Get-OpenFile($initialDirectory) { 
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | 
    Out-Null 

    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog 
    $OpenFileDialog.InitialDirectory = $initialDirectory 
    $OpenFileDialog.ShowDialog() 
    $OpenFileDialog.Filename 
    $OpenFileDialog.ShowHelp = $true 
} 

$InputFile = Get-OpenFile 
if ($InputFile -eq "Cancel") { 
    Write-Host "Canceled By User" 
    exit 
} else { 
    $Computers = @(Get-Content -Path $InputFile) 
} 

foreach ($computer in $computers) { 
    Write-Host "Installing eAudIT 2014V2 on Selected Computers" 
    Invoke-Command $eAudIT2014V2Install 
} 

ich zu bemerken, dass, wenn ich dieses Skript sagen etwas Grundsätzliches wie notepad.exe zu laufen, ein dllhost Prozess auf der Maschine startet, aber Notizblock nie. Was mache ich falsch?

Antwort

3

Die Antwort ist hier ziemlich einfach. Ihr gesamtes Skript ist nichts wert, wenn Sie dem Cmdlet Invoke-Command nicht mitteilen, auf welchem ​​Computer der Code ausgeführt werden soll. Wie es ist, durchlaufen Sie einfach eine Schleife und rufen diesen Befehl X mehrmals auf dem lokalen Rechner auf. Sie müssen diese Sekunde auf die letzte Zeile ändern, um das Gerät anzugeben, auf dem der Code ausgeführt werden soll:

Invoke-Command $eAudIT2014V2Install -ComputerName $computer 
+0

Vielen Dank für die Eingabe. Das Hinzufügen dieser Computer-Zeile hat tatsächlich Prozesse zur Remote-Ausführung gebracht, aber auf dem Bildschirm geschieht nichts, und es gibt ganz bestimmt keine Installationsaktivität der Setup-Datei, die ich ausgelöst habe. Ideen? –

+0

Vergessen Sie nicht, Powershell-Befehle werden in Ihrer eigenen Sitzung ausgeführt. Ein angemeldeter Benutzer wird also nicht sehen, was Sie tun, da es sich um verschiedene Sitzungen handelt. Wenn Sie unter dem Task-Manager unter allen Prozessen suchen, würden Sie wahrscheinlich sehen, dass Notepad ausgeführt wird. Wenn Sie den Editor auf einem Remotecomputer öffnen möchten, der für den angemeldeten Benutzer sichtbar ist, könnte dies beispielsweise eine geplante Aufgabe sein. – kfordham281

Verwandte Themen