2017-10-07 9 views
0

CMDからパラメータとしてPowerShellスクリプトに配列を渡す際に問題があります。CMDからPowerShellにパラメータとして配列を渡すと問題が発生する

powershell -file .\script.ps1 -serverArray Server1,Server2 

$serverArrayが配列渡されていないので、私はエラーを取得する:場合

 
Server1,Server2 
Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 
0x800706BA) 
At C:\script.ps1:58 char:29 
+    $servState = (Get-WmiObject <<<< Win32_Service -ComputerName $server -Filter "name='$serviceName'").State 
    + CategoryInfo   : InvalidOperation: (:) [Get-WmiObject], COMException 
    + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand 

を私はCMDからスクリプトを呼び出す方法

[CmdletBinding()] 
Param(
    [string[]]$serverArray, 
) 

$serviceName = 'service1' 

function getState { 
    Process { 
     $serverArray 
     foreach ($server in $serverArray) { 
      $servState = (Get-WmiObject Win32_Service -ComputerName $server -Filter "name='$serviceName'").State 
     } 
    } 

getState 

:ここではPSコードの例 スクリプトが$serverArrayを配列として受け取るため、PowerShellウィンドウから同じコマンドを実行します。

.\script.ps1 -serverArray Server1,Server2 
 
Server1 
Server2 
+0

'-file' - >' -command' – PetSerAl

+0

してください、それはDOEを確認するためにあなたの[MCVE]コードをテスト、実行してくださいあなたのパラメータ定義の偽の末尾のカンマや関数の閉じ括弧のような追加のエラーを導入しないでください。 –

答えて

0

コマンドプロンプトからこれを実行できます。 powershell script.ps1 "Server1,Server2"

そして、あなたはあなたのスクリプトに複数のパラメーターを追加する場合:

powershell script.ps1 "Server1,Server2" "parameter2 argument" "parameter3 argument"

+0

'powershell -NoProfile -File。\ script.ps1 ...'はどうですか? – lit

0

CMDは、PowerShellの配列については何も知りません。あなたは、個々のトークンとして

powershell -File .\script.ps1 Server1 Server2 

をサーバリストを渡して、代わりにあなたのスクリプトで指定されたパラメータのautomatic variable$argsを使用することができます。

foreach ($server in $args) { 
    ... 
} 

またはあなたがコンマでパラメータの値をsplitすることができますボディ:

[CmdletBinding()] 
Param(
    [string]$Servers 
) 

$serverArray = $Servers -split ',' 
関連する問題