2015-03-31 46 views
-1

我無法讓PowerShell在命令行上接受單個字符串參數輸入或接受包含服務器列表的輸入文件。Powershell - 接受使用Get-Content的單個字符串參數或文件列表的腳本

我試過工作this example但我不能讓事情工作。

我也嘗試使用param([switch] $FileList),但IF聲明沒有達到else塊。

我希望放在一起的是一個腳本,它接受在命令行中傳入的單個服務器名稱或接受來自文本文件的輸入。我很欣賞任何指針!

-edit,使用下面運行的腳本/沒有PARAM返回Run on single server,它是同if (($FileList -eq $false))使用基思·希爾的例子,又不管我怎麼努力通過腳本中的輸出總是相同(IF模塊從未達到ELSE塊)

-Edit2,第二個代碼示例在將單個服務器名稱傳遞給腳本時起作用,問題對於我試圖讓[Switch]參數接受文件名並將其傳遞給代碼塊foreach循環。它在ELSE行的以下Get-EventLog : Invalid value '.\fake.txt' for parameter 'machineName'.錯誤。

param([switch] $FileList) 
if (($FileList -eq $true)) { "No file list input" } 
Else { "Run on single server"} 

第二個代碼示例

param(
[switch]$FileList, 
[string]$server) 

if ($FileList -eq $true) { 
$list = GC $FileList 
foreach ($server in $list){Get-EventLog -ComputerName $server -LogName system | Where-Object {$_.EventID -eq '6005'} | Select TimeGenerated,Message | Select -first 1}#End foreach 
} 

Else{ 
Get-EventLog -ComputerName $server -LogName system | Where-Object {$_.EventID -eq '6005'} | Select TimeGenerated,Message | Select -first 1 
} 
+0

您使用@Keith Hill示例時出現了哪個問題? – JPBlanc 2015-04-01 03:31:23

+0

編輯問題以提供更多詳細信息。到目前爲止,我無法專注於此,對發佈不完整的問題表示歉意。 – user4317867 2015-04-01 05:24:55

+0

一個'[switch]'參數不能取值 - 它更類似於布爾值。如果它在參數中被指定,它變爲'$ true',否則它的'$ false'。如果你想要一個服務器陣列,你需要使用'[string []] $ servers'作爲參數 – arco444 2015-04-01 08:56:27

回答

1

如果你設置使用開關參數,這將沒有幫助,但如果你只是想,可以是文件或服務器名稱的單個參數它會。

param (
    [parameter(Mandatory = $true)] [string]$FileList 
) 

if (Test-Path $FileList) { 
    "File found, do file related commands." 
} 
Else { "Single server actions." }
+0

好吧,這看起來不錯,一個簡單的方法來實現我的目標。看着'[switch]'選項,這隻會增加腳本的複雜性,因爲它需要用戶在腳本運行時輸入'-FileList'。謝謝! – user4317867 2015-04-01 22:09:27

相關問題