2011-05-09 81 views
3

好日子所有的PowerShell 2.0傳遞變量ComputerName參數從批處理文件CMD

我想建立一個共同的腳本,我可以從.bat腳本調用的.ps1

時傳遞的服務器名稱

在我的蝙蝠腳本我有這樣的說法:

set setver_name=our2008server 
powershell -ExecutionPolicy RemoteSigned 
    -NonInteractive 
    -NoProfile 
    -command 
     "& '\\serverd1\d$\Program Files\%run_dir%\Dcls\PS\Stop_Bkgnd_%run_env%_01.ps1' " 
    -server_name %server_name% 

在我的PS1腳本我有:

gwmi win32_service -Computername $server_name -filter "name = 'BackgroundQueue'" | 
    % {$_.StopService()} 

如果我將$ server_name替換爲實際的服務器名稱,它可以正常工作。只是無法從.bat文件中獲取要在.ps1中識別的變量。

任何幫助將不勝感激。

BobZ

+0

[重複的問題](http://stackoverflow.com/questions/5592531/how-to-pass-an-argument-to-this-powershell-script/5596698#5596698)。 – 2011-05-09 20:40:57

回答

1

最簡單的方法是使用$args變量。這是一個包含傳遞給PowerShell腳本的所有參數的數組。

使用範例:

Write-Host "Num Args:" $args.Length; 
foreach ($arg in $args) 
{ 
    Write-Host "Arg: $arg"; 
} 

$args[0] 
$args[1] 

所以,在你的榜樣,我會改變command參數讀取

// Note the change at the end of this string 
-command "& '\\path\to\my\powershell_script.ps1' %setver_name%" 

,改變PS1文件是

// Note I have used $args[0]. 
gwmi win32_service -Computername $args[0] -filter "name = 'BackgroundQueue'" | 
    % {$_.StopService()} 
+0

非常感謝你,這個效果很好 在我的蝙蝠腳本我有這樣的說法: 集setver_name = our2008server PowerShell的-ExecutionPolicy下RemoteSigned -nonInteractive -NoProfile -command 「和「\\ serverd1 \ d $ \ Program Files文件\%run_dir%\ DCL的\ PS \ Stop_Bkgnd_%run_env%_01.ps1' %SERVER_NAME% 「 $ SERVER_NAME =的$ args [0] gwmi win32_service時-computername $服務器名稱篩選器」 NAME = 'BackgroundQueue' 「| %{$ _ St​​opService()} – BobZ 2011-05-10 13:34:32

4

更新您的腳本使用param:

param($server_name) 
gwmi win32_service -Computername $server_name -filter "name = 'BackgroundQueue'" | 
% {$_.StopService()} 

在呼叫時,將-server_name %server_name%移動到命令中。

set setver_name=our2008server 
powershell -ExecutionPolicy RemoteSigned 
    -NonInteractive 
    -NoProfile 
    -command 
     "& '\\serverd1\d$\Program Files\%run_dir%\Dcls\PS\Stop_Bkgnd_%run_env%_01.ps1 -server_name %server_name%' " 
+0

出現錯誤,缺少終止符。我稍後會研究使用param。由於我沒有提到我會傳遞倍數,所以我將按照解釋的方式使用參數。 – BobZ 2011-05-10 13:32:56

+0

錯誤可能是錯位的報價。請嘗試: 「&'\\ serverd1 \ d $ \ Program Files \%run_dir%\ Dcls \ PS \ Stop_Bkgnd_%run_env%_01.ps1'-server_name%server_name%」 改爲(請參閱單引號移回文件名末尾) manojlds對於雙引號內的參數是正確的。 – Jay 2012-01-09 13:48:09

相關問題