1.创建数组
"a","b","c" 字符串数组
1,2,3 整数数组
@() 空数组 @(2) 一个元素的数组
1,(2,3),4 数组包含数组
,"hello" 一个元素的数组
$a[2..20] 返回从第3个元素到第21个元素
数组下标从零开始。
a.要创建指定大小的数组,使用New-Object命令
$myArray = New-Object string[] 10
$myArray[5] = "hello" ;
b.创建一个交错的多为数组(一个数组的数组),可以使用@()数组语法。
$myArray = @((1,2,3,4),(5,6,7,8));
$myArray[1][2]; 返回 :7
$myArray[0][1]; 返回 :2
<#
交错数组的分析图:
0 1 2 3
0 1 2 3 4
1 5 6 7 8
#>
创建一个交错数组
$a = @(,(,1)) $a[0][0] 返回:1
b.创建一个(非交错)多维数组,使用New-Object命令
$multid = New-Object "int32[,]" 2,4
$multid[0,0] = 2;
$multid[1,3] = 8;
注意:要检查列表是否包含指定的项,使用-contains运算符。
c.合并数组:要合并数组,需要使用加法运算符(+)
$firstArray = "a","b","c","d";
$secondArray = 1,2,3,4 ;
$thirdArray = $firstArray + $secondArray ;
d.使用运算符-ne、-notlike和-notmatch从数组中移出元素。
$array = "a1","a2","ac","a3","a2";
$array -notlike "*1*";
$array = $array -ne "a2" ;(实际改变数组的值)
2.用户交互
a.读取用户输入的一行,使用Read-Host命令:
$directory = Read-Host "Enter a directory ";
Enter a directory :d:\temp
b.读取用户输入的按键
$key = [Console]::ReadKey($true);
$key
c.在交互比较频繁的情况下(比如你关心用户按下的是向上键或向下键)
$key = $Host.UI.RawUI.ReadKey("NoEcho,IncludekeyDown");
$key
$key.ControlkeyState
3.为长时间运行的任务提供进度更新
#为长时间命令显示状态更新
$actity = " A long-running operation";
$status ="Initializing";
#Initialize the long-running operation
for($counter = 0 ; $counter -lt 100 ; $counter++ )
{
$currentOperation = "Initializing item $counter" ;
Write-Progress -Activity $actity -Status $status `
-PercentComplete $counter `
-CurrentOperation $currentOperation
Start-Sleep -Milliseconds 20 ;
}
4.跟踪和错误管理
a.若要访问到目前为止生成错误的列表,需要使用$error变量
$error.Count ;
$error.Clear();
注意:若想在表和列表中查看错误(Format-Table或Format-List)必须指定-Force以重写自定义的试图。
b.若要写入警告和错误,分别使用Write-Warning和Write-Error命令。使用throw语句生成一个终止错误。
5.查看和修改环境变量
a.查看环境变量:dir env:
b.访问环境变量:$env:path
c.若访问的环境变量值是在计算机或用户级别配置的,可以使用
[Environment]::GetEnvironmentVariable("path","User");
d.要永久性地设置这些计算机或特定于用户的环境变量,可以使用
[Environment]::SetEnvironmentVariable(<variable>,<value>,<target>);
e.若要确定常见的系统路径和特殊文件夹的位置,可以使用
[Environment]::GetFolderPath("System");
注意你可能不具备所有提供的这些代名词,所以查看所有这些值的一种方法是使用[Enum]::GetValues();
[Enum]::GetValues([Environment+specialFolder]);