Pipeline-Eingabe an ausführbare Dateien mit PowerShell

6377
Maxim V. Pavlov

Ich muss den folgenden Befehl in PowerShell ausführen:

%windir%\system32\inetsrv\appcmd add site /in < c:\mywebsite.xml 

Ich versuche es so zu machen:

$appCmd = "$Env:SystemRoot\system32\inetsrv\appcmd.exe"   [String] $targetFilePath = $restoreFromDirectory + "config.xml"  $AllArgs = @('add', 'site', '/in')  & $appCmd $AllArgs | Get-Content $targetFilePath 

Dies ist jedoch offensichtlich falsch, da es einen Fehler gibt:

Das Eingabeobjekt kann an keine Parameter für den Befehl gebunden werden, da der Befehl keine Pipeline-Eingabe benötigt oder die Eingabe und ihre Eigenschaften mit keinem der Parameter übereinstimmen, für die eine Pipeline-Eingabe erforderlich ist.

Bitte geben Sie an, welche Alternative zu dem oben genannten Skript in PowerShell die richtige ist.

0

1 Antwort auf die Frage

2
Frank Thomas

Die PowerShell-Pipe nimmt links die Eingabe und übergibt sie an den Befehl rechts. In diesem Fall übergeben Sie die Ausgabe Ihres Befehls an Get-Content, für die kein Eingabeparameter erforderlich ist.

Ändern Sie Ihre Anrufzeile so, dass die Eingabe von links nach rechts fließt:

Get-Content $targetFilePath | & $appCmd $AllArgs 

Ein Beispiel finden Sie in dieser Antwort auf StackOverflow .