PowerShell 數(shù)組的多種錄入方法
這個(gè)需求是小駱駝發(fā)起的。感謝 微軟云方案交流 236804566 這個(gè)高端群的用戶貢獻(xiàn)。
我們首先看看一個(gè)標(biāo)準(zhǔn)的數(shù)組是怎么錄入的
PS D:\> $arr= "adf","asdfer","sredsaf" PS D:\> $arr adf asdfer sredsaf
這里需要注意的是,雙引號(hào)和逗號(hào)的分隔。不得不說(shuō),這是最簡(jiǎn)單的錄入方式,但輸入方式不太友好,需要用戶自己去改PowerShell腳本
為了便于用戶交互,我寫了下面的一個(gè)范例
$changdu = Read-Host("請(qǐng)輸入陣列中數(shù)據(jù)長(zhǎng)度") $s1= "@{" for($x=0; $x -le $changdu-1; $x++) {if($x -ne 0) { $servers = Read-Host('"輸入要增加的計(jì)算機(jī)名') $s1 = $s1+$x+'="'+$servers+'";' $s1 } if($x -eq 0) { $servers = Read-Host('輸入第一個(gè)計(jì)算機(jī)名') $s1 = $s1+$x+'="'+$servers+'";' $s1 }} $s1 = '$arr='+$s1+"}" $s1 echo xx |Out-File d:\3456.ps1 $files = (Get-Childitem d:\3456.ps1).pspath clear-content $files add-Content $files -Value "$s1"
執(zhí)行的話,效果是這樣的
請(qǐng)輸入陣列中數(shù)據(jù)長(zhǎng)度: 4 輸入第一個(gè)計(jì)算機(jī)名: asdf @{0="asdf"; "輸入要增加的計(jì)算機(jī)名: ert @{0="asdf";1="ert"; "輸入要增加的計(jì)算機(jī)名: 2345 @{0="asdf";1="ert";2="2345"; "輸入要增加的計(jì)算機(jī)名: 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
最終輸出的是一句話 ,但是這句話是一個(gè)字符串,不是數(shù)組,所以要把它輸出到其他文件,然后單獨(dú)運(yùn)行一下。
$arr=@{0="asdf";1="ert";2="2345";3="gadf";}
運(yùn)行下面的命令就可以了,當(dāng)然這句話也可以加在上面的腳本中。
powershell d:\3456.ps1
以上方法的可以解決需求,問(wèn)題在于,它需要新創(chuàng)建一個(gè)文件,從效率上來(lái)說(shuō),是低一些,不過(guò)用到了循環(huán),用戶體驗(yàn)上還是很不錯(cuò)的,所以改一改,我們?cè)囈幌聅plit方法。
$arr=(read-host("請(qǐng)輸入需要?jiǎng)?chuàng)建的虛擬機(jī)名稱,多個(gè)虛擬機(jī)用英文狀態(tài)下的逗號(hào)隔開")).Split(',')
這里用到了split方法,用都好分隔數(shù)據(jù),把他們變成數(shù)組,關(guān)于split方法,下面這個(gè)鏈接說(shuō)的干脆利落很詳細(xì),我這里就不廢話了
http://www.dbjr.com.cn/article/69147.htm
那么上面的腳本我也可以修改一下,用split方法來(lái)處理,這樣好處是在當(dāng)前腳本就可以輸出,以及用戶不需要輸入雙引號(hào)和
$changdu = Read-Host("請(qǐng)輸入陣列中數(shù)據(jù)長(zhǎng)度") $s1= "" for($x=0; $x -le $changdu-1; $x++) {if($x -ne 0) { $servers = Read-Host('"輸入要增加的計(jì)算機(jī)名') $s1 = $s1+$servers+';' $s1 } if($x -eq 0) { $servers = Read-Host('輸入第一個(gè)計(jì)算機(jī)名') $s1 = $s1+$servers+';' $s1 }} $s2 =($s1).Split(';') echo $s2
另外應(yīng)該說(shuō)還有一種方法,是用到了.net的方法來(lái)處理,可視化很差,但是效果很好
$bb2= New-Object System.Collections.ArrayList
$bb2.Add("第一個(gè)")
$bb2.Add("第二個(gè)")
輸出的結(jié)果是這樣的,可以看到這種方法更簡(jiǎn)單,修改一下,我們也可以做成交互式錄入的方式。
PS D:\> $bb2
第一個(gè)
第二個(gè)
總結(jié)一下,應(yīng)該至少有4種方法解決我們的問(wèn)題
1、輸出字符串到文本中,用PowerShell xxx.ps1的方式運(yùn)行
2、用split方法處理字符串,切割成數(shù)組
3、直接無(wú)交互的一句話處理
4、.net方法處理
本文出自 “九叔-微軟私有云” 博客
相關(guān)文章
PowerShell腳本清理指定天數(shù)前的臨時(shí)文件夾實(shí)現(xiàn)代碼
這篇文章主要介紹了PowerShell腳本清理指定天數(shù)前的臨時(shí)文件夾實(shí)現(xiàn)代碼,指定天數(shù)可以任意修改數(shù)字實(shí)現(xiàn),需要的朋友可以參考下2014-08-08Powershell的break、continue和return簡(jiǎn)單總結(jié)
這篇文章主要介紹了Powershell的break、continue和return簡(jiǎn)單總結(jié),和其它語(yǔ)言中的作用相同,所以本文的總結(jié)比較短小,需要的朋友可以參考下2014-07-07Powershell生成Windows密碼算法簡(jiǎn)單學(xué)習(xí)
利用Powershell生成Windows密碼:密碼一共8位/字符的次序是隨機(jī)組成的等等,接下來(lái)為你詳細(xì)介紹下,感興趣的你可以參考下哈,希望對(duì)你學(xué)習(xí)Powershell有所幫助2013-03-03PowerShell中使用GetType獲取變量數(shù)據(jù)類型
這篇文章主要介紹了PowerShell中使用GetType獲取變量數(shù)據(jù)類型,本文使用實(shí)例來(lái)說(shuō)明GetType的使用方法,并對(duì)返回值作了一定的解釋,需要的朋友可以參考下2014-08-08PowerShell中直接輸出轉(zhuǎn)義字符或變量名稱的方法
這篇文章主要介紹了PowerShell中直接輸出轉(zhuǎn)義字符或變量名稱的方法,也就是原樣輸出字符串,不理會(huì)字符串可能包含的換行符、變量等,需要的朋友可以參考下2014-08-08