這個需求是小駱駝發起的。感謝 微軟云方案交流 236804566 這個高端群的用戶貢獻。
我們首先看看一個標準的數組是怎么錄入的
1
2
3
4
5
6
|
PS D:> $arr= "adf" , "asdfer" , "sredsaf" PS D:> $arr adf asdfer sredsaf |
這里需要注意的是,雙引號和逗號的分隔。不得不說,這是最簡單的錄入方式,但輸入方式不太友好,需要用戶自己去改PowerShell腳本
為了便于用戶交互,我寫了下面的一個范例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$changdu = Read-Host( "請輸入陣列中數據長度" ) $s1= "@{" for ($x=0; $x - le $changdu-1; $x++) { if ($x - ne 0) { $servers = Read-Host( '"輸入要增加的計算機名' ) $s1 = $s1+$x+ '="' +$servers+ '";' $s1 } if ($x - eq 0) { $servers = Read-Host( '輸入第一個計算機名' ) $s1 = $s1+$x+ '="' +$servers+ '";' $s1 }} $s1 = '$arr=' +$s1+ "}" $s1 echo xx |Out-File d:?6.ps1 $files = (Get-Childitem d:?6.ps1).pspath clear -content $files add-Content $files -Value "$s1" |
執行的話,效果是這樣的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
請輸入陣列中數據長度: 4 輸入第一個計算機名: asdf @{0= "asdf" ; "輸入要增加的計算機名: ert @{0= "asdf" ;1= "ert" ; "輸入要增加的計算機名: 2345 @{0= "asdf" ;1= "ert" ;2= "2345" ; "輸入要增加的計算機名: gadf @{0= "asdf" ;1= "ert" ;2= "2345" ;3= "gadf" ; $arr=@{0= "asdf" ;1= "ert" ;2= "2345" ;3= "gadf" ;} PS D:> $arr=@{0= "asdf" ;1= "ert" ;2= "2345" ;3= "gadf" ;} PS D:> $arr Name Value ---- ----- 3 gadf 2 2345 1 ert 0 asdf |
最終輸出的是一句話 ,但是這句話是一個字符串,不是數組,所以要把它輸出到其他文件,然后單獨運行一下。
$arr=@{0="asdf";1="ert";2="2345";3="gadf";}
運行下面的命令就可以了,當然這句話也可以加在上面的腳本中。
powershell d:?6.ps1
以上方法的可以解決需求,問題在于,它需要新創建一個文件,從效率上來說,是低一些,不過用到了循環,用戶體驗上還是很不錯的,所以改一改,我們試一下split方法。
$arr=(read-host("請輸入需要創建的虛擬機名稱,多個虛擬機用英文狀態下的逗號隔開")).Split(',')
這里用到了split方法,用都好分隔數據,把他們變成數組,關于split方法,下面這個鏈接說的干脆利落很詳細,我這里就不廢話了
http://www.jfrwli.cn/article/82018.html
那么上面的腳本我也可以修改一下,用split方法來處理,這樣好處是在當前腳本就可以輸出,以及用戶不需要輸入雙引號和
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
$changdu = Read-Host( "請輸入陣列中數據長度" ) $s1= "" for ($x=0; $x - le $changdu-1; $x++) { if ($x - ne 0) { $servers = Read-Host( '"輸入要增加的計算機名' ) $s1 = $s1+$servers+ ';' $s1 } if ($x - eq 0) { $servers = Read-Host( '輸入第一個計算機名' ) $s1 = $s1+$servers+ ';' $s1 }} $s2 =($s1).Split( ';' ) echo $s2 |
另外應該說還有一種方法,是用到了.net的方法來處理,可視化很差,但是效果很好
$bb2= New-Object System.Collections.ArrayList
$bb2.Add("第一個")
$bb2.Add("第二個")
輸出的結果是這樣的,可以看到這種方法更簡單,修改一下,我們也可以做成交互式錄入的方式。
PS D:> $bb2
第一個
第二個
總結一下,應該至少有4種方法解決我們的問題
1、輸出字符串到文本中,用PowerShell xxx.ps1的方式運行
2、用split方法處理字符串,切割成數組
3、直接無交互的一句話處理
4、.net方法處理
本文出自 “九叔-微軟私有云” 博客