PowerShell-数组的多种录入方法

PS:这个需求是小骆驼发起的。感谢 微软云方案交流 236804566  这个高端群的用户贡献。

我们首先看看一个标准的数组是怎么录入的

PS D:\> $arr= "adf","asdfer","sredsaf"

PS D:\> $arr
adf
asdfer
sredsaf

这里需要注意的是,双引号和逗号的分隔。不得不说,这是最简单的录入方式,但输入方式不太友好,需要用户自己去改PowerShell脚本

为了便于用户交互,我写了下面的一个范例

$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:\3456.ps1
$files = (Get-Childitem d:\3456.ps1).pspath
clear-content $files
add-Content $files -Value "$s1"

执行的话,效果是这样的

请输入阵列中数据长度: 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";
[email protected]{0="asdf";1="ert";2="2345";3="gadf";}

PS D:\> [email protected]{0="asdf";1="ert";2="2345";3="gadf";}

PS D:\> $arr

Name                           Value                                                                                                                                 
----                           -----                                 
3                              gadf            
2                              2345            
1                              ert            
0                              asdf

最终输出的是一句话 ,但是这句话是一个字符串,不是数组,所以要把它输出到其他文件,然后单独运行一下。

[email protected]{0="asdf";1="ert";2="2345";3="gadf";}

运行下面的命令就可以了,当然这句话也可以加在上面的脚本中。

powershell d:\3456.ps1

=================================================

以上方法的可以解决需求,问题在于,它需要新创建一个文件,从效率上来说,是低一些,不过用到了循环,用户体验上还是很不错的,所以改一改,我们试一下split方法。

$arr=(read-host("请输入需要创建的虚拟机名称,多个虚拟机用英文状态下的逗号隔开")).Split(‘,‘)

这里用到了split方法,用都好分隔数据,把他们变成数组,关于split方法,下面这个链接说的干脆利落很详细,我这里就不废话了

http://www.pstips.net/string-object-methods.html

那么上面的脚本我也可以修改一下,用split方法来处理,这样好处是在当前脚本就可以输出,以及用户不需要输入双引号和

$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方法处理

时间: 2024-11-05 06:05:55

PowerShell-数组的多种录入方法的相关文章

Powershell 数组的使用(一)

Note: 本文绝大多数内容来自于http://www.pstips.net,本人进行了搜集整理进行自我学习并分享出来供大家学习. 一.数组的创建 使用@()来声明数组,或者直接","来分隔创建; 2. 通过此种方式创建的数组为固定大小的数组,无法使用add.remove等操作; 3. 空数组和单元素数组的定义; 二.数组的访问 1. 访问数组时可通过对数组元素使用索引寻址,第一个元素的索引地址为0,依次递加,第n个元素的索引地址为n-1,最后一个元素的索引地址为count-1,也可以

Powershell 数组的使用(一)【动态数组】

在上文中我们介绍了如何使用[静态数组],内容涉及到数组的创建.元素的添加删除等操作,很显然,通过该种方式去操作一个数组是非常麻烦的,静态数组的目的在于让大家了解数组的基本概念和操作,在实际使用数组的脚本中,我们会创建动态数组来更好的提高脚本运算速度和易编写性. 动态数组.使用.Net的类来进行定义,它除了像静态数组一样可以进行比较,索引查找外还可以很方便的进行元素变更,在循环添加元素时它也是自由的去添加单个元素而不是重新定义整个数组,因而极大的提高了脚本的运算速度. 一. 动态数组的定义,动态数

PowerShell【初级篇●Powershell数组和哈希表】

Powershell数组和哈希表 创建数组可以使用逗号.例如,$nums=2,0,1,2 对于连续的数字数组可以使用一个更快捷的方法.例如,$nums=1..5 如果数组中元素的类型为弱类型,默认可以存储不同类型的值.例如,$array=1,"2012世界末日",([System.Guid]::NewGuid()),(get-date) 使用@()创建数组.空数组.例如,$a= @() 1个元素的数组.例如,$a=,"moss" 使用@{}创建哈希表.例如,[ema

javascript中数组的22种方法 (转载)

前面的话 数组总共有22种方法,本文将其分为对象继承方法.数组转换方法.栈和队列方法.数组排序方法.数组拼接方法.创建子数组方法.数组删改方法.数组位置方法.数组归并方法和数组迭代方法共10类来进行详细介绍 对象继承方法 数组是一种特殊的对象,继承了对象Object的toString().toLocaleString()和valueOf()方法 [toString()] toString()方法返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串 [注意]该方法的返回值与不使用任何参数

[51单片机学习笔记ONE]-----LED灯的多种使用方法

一.交替闪烁8个LED灯,时间间隔为1s 1 /****************************************************** 2 实验名称: 交替闪烁8个LED灯,时间间隔1s 3 实验时间: 2014年12月2日 4 ******************************************************/ 5 6 #include <reg51.h> 7 8 void delay(unsigned char a); 9 10 void m

一维数组元素的输入输出方法总结

1.数组的下标法:直观且容易理解 如: int a[5],i; printf("Input five numbers:"); for(i=0;i<5;i++) {  scanf("%d",&a[i]); } for(i=0;i<5;i++) {     printf("%4d",a[i]); } 2.数组名首地址法(指针法):指针增1运算的执行效率很高,利用指针的增1运算实现指针的移动,省去了每寻找一个数组元素都要进行的指针算

将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold", "foreign exchange","fixed income", "futures", "options"}; List<String> assetList = Arrays.asList(asset);

测试数组push和unshift方法的效率

先贴代码,之后再来补内容 <!DOCTYPE HTML> <html> <head> <title>测试数组push和unshift方法的效率</title> </head> <body> </body> <script type="text/javascript"> var startTime = 0; /* 开始时间 */ var endTime = 0; /* 结束时间 *

PowerShell 数组以及XML操作

PowerShell基础 PowerShell数组操作 将字符串拆分成数据的操作 cls #原始字符串 $str = "abc,def,ghi,mon" #数据定义 #$StrArray = New-Object Collections.Generic.List[string] $StrArray = @() #拆分 $StrArray = $str.Split(",") $len = $StrArray.Count Write-Host "数据中元素总数