PowerShell 数组的多种录入方法_PowerShell

这个需求是小骆驼发起的。感谢 微软云方案交流 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";
$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:\3456.ps1

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

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

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

http://www.jb51.net/article/69147.htm

那么上面的脚本我也可以修改一下,用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方法处理

本文出自 “九叔-微软私有云” 博客

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索powershell
数组录入
powershell 数组、powershell 遍历数组、powershell 二维数组、powershell定义数组、powershell 数组赋值,以便于您获取更多的相关知识。

时间: 2024-07-28 22:46:44

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

PowerShell数组的一些操作技巧_PowerShell

PowerShell数组的使用例子,PowerShell中使用逗号给数组赋值,数组中可以存放各种不同类型的数据值. PowerShell中使用逗号给数组赋值,数组中可以存放各种不同类型的数据值. 数组的赋值 先看下面一个简单的例子: 复制代码 代码如下: $myArray = 'Hello', 12, (Get-Date), $null, $true $myArray.Count 这个数组中有五个元素,有字符串.数字.日期.空值.布尔值等不同的数据类型. 索引数组的数据(正序与逆序) 使用中括号

javascript中数组的多种定义方法和常用函数简介_基础知识

数组的定义:方法1. 复制代码 代码如下: var mycars=new Array()mycars[0]="sharejs.com"mycars[1]="Volvo"mycars[2]="BMW" 方法2.定义和初始化一起: 复制代码 代码如下: var mycars=new Array("Saab","Volvo","BMW"); 或者: 复制代码 代码如下: var mycars=

PowerShell获取字符串长度的方法_PowerShell

使用PowerShell可以很方便的计算字符串的长度.PowerShell是继承于Microsoft .NET Framework的,所以在.NET里面怎么获取到字符串的长度,在PowerShell中可以使用相同的方法. 我们知道在.NET中,可以使用String.Length方法来获取字符串的长度,让我们看看PowerShell中怎么样依葫芦画瓢. 复制代码 代码如下: $string = "1234567"; Write-Host $string.Length; #输出为7 如果你

PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法_PowerShell

     单独使用一种脚本来完成一项任务是理想的状态,而现实的情况往往是,因为历史原因.或者团队组成,你不得不将多种脚本或者程序组合在一起,来完成某项任务.本文的讨论范围是Cmd命令与PowerShell命令之间的组合与调用.      毋庸置疑,Cmd命令与PowerShell命令之间的调用有两个方向.即在Cmd命令中调用PowerShell的命令,以及在PowerShell脚本中调用Cmd命令.需要说明的是,这里的调用分两个层次:一.简单的在其中一个的环境中执行另外一个命令,完成部分工作:二

自定义PowerShell控制台提示符风格的方法_PowerShell

PowerShell控制台的默认命令行提示为PS+(当前路径)+箭头,形如: 复制代码 代码如下: PS C:\Users\非苔> 前面加PS是PowerShell的标志,为了和传统的CMD控制台区别开来.后面加当前路径和箭头是为了和一般的命令行保持一致.这样的设计本来无可厚非,但是如果我在写博客时,需要执行某个命令然后连同结果一起复制出来,麻烦来了.比如我要演示Get-Date,打开控制台,敲入命令: 复制代码 代码如下: PS C:\Users\非苔> Get-Date 2014年4月16

PowerShell中判断闰年的方法_PowerShell

使用PowerShell可以很方便的判断一个年限是不是闰年,只要一句话搞定,IsLeapYear函数,真是革命啊! 小编以前在学其它语言的时候,给定一个年限,判断它是闰年或平年,需要写大段大段的代码去实现.C#出来之后,这个问题解决了,DateTime类型下面有一个静态方法:IsLeapYear(int year).使用这个方法可以直接返回True或False.True即表示闰年,False表示平年. 且看演示代码: 复制代码 代码如下: PS C:\Users\zhanghong> [date

PowerShell中终止管道的方法_PowerShell

如果你能够提前知道你想从管道中获取元素的个数,可以使用Select-Object来终止流处理命令的的管道,这会节省很多时间. 下面的例子会从Windows文件夹下搜寻 explorer.exe示例,因为Select-Object语句可以在管道找到结果的那一瞬终止管道.否则,Get-ChildItem会递归的遍历所有子目录然后匹配出你想要的结果. 复制代码 代码如下: #requires -Version 3 Get-ChildItem -Path c:\Windows -Recurse -Fil

Powershell中定义常量的方法_PowerShell

支持所有版本. 通常变量是可变的,你可以修改他们,除非你使用的是一个常量. 可是这里没有这样的变量但常量它可以被创建,这里创建了一个值为1的常量. 复制代码 代码如下: New-Variable -Name cannotChange -Value 1 -Option Constant 当脚本运行时你不可以再改变这个变量的值,此变量与值将绑定在此会话,所以某个明确的信息永远不会改变时,可以使用常量. 你也可以在配置文件定义常量: 复制代码 代码如下: PS> $profile.AllUsersAl

Powershell获取环境变量的方法_PowerShell

Powershell中获取一个Windows环境变量,简单一点就是使用"env:"前缀: 复制代码 代码如下: PS> $env:windir C:\Windows PS> $env:USERNAME Tobias 实际上"env:"是一种驱动,所以你能查询到大多或部分环境变量.下面将显示全部的名字中包含user的环境变量: 复制代码 代码如下: PS> dir env:\*user* Name