Powershell Array

Powershell Array
A PowerShell array holds a list of data items.
Two types of arrays
1. Not Declared Type
2. Strongly Typed
The data elements of a PowerShell array need not be of the same type, unless the data type is declared (strongly typed).
Create Arrays
To create an Array separate each elements with commas.
Create an array named $myFirstArray containing elements with a mix of data types:
$myFirstArray = 9,”Hello”,”MyData”,8.5,”Robert”
or using explicit syntax:
$myFirstArray = @(9,”Hello”,8.5,”Robert”)
To distribute the values back into individual variables:
$var1,$var2,$var3,$var4,$var5=$myFirstArray
Create an array containing several numeric (int) values:
$myIntArray = 1,2,3,4,5,6,7
or using the range operator (..) for sequence.
$myIntArray = (1..7)
Here Strongly typed Array:
[int[]] $myTypedArray = 12,64,8,64,12
Create an empty array:
$myFirstArray = @()
Create an array with a single element:
$myFirstArray = @(“Hello World”)
Create a Multi-dimensional array:
$myMultiArray = @( (1,2,3), (10,20,30) )
Add values to an Array.
This is done using the old C language way ‘+=’ operator
Append an extra element with a value of 23 to the $anyValue array:
$anyValue += 32
Retrieve items from an Array
To retrieve an element, specify its number, PowerShell numbers the array elements starting at 0.
Return all the elements in an array:
$anyValue
Return the first element in an array:
$myFirstArray[0]
Return the seventh element in an array:
$myFirstArray[6]
Return the 5th element through to the 10th element in an array:
$myFirstArray[4..9]
Return the last element in an array:
$myFirstArray[-1]
Return the first element from the first row in a multi-dimensional array:
$myMultiArray[0][0]
You can also combine named elements with a range, separating them with a +
so $myFirstArray[1,2+4..9] will return the elements at indices 1 and 2 and then 4 through 9 inclusive.
Return the length of an array (how many items are in the array):
$myFirstArray.length-1
Loop through the elements in an array:
foreach ($element in $myFirstArray) {$element}
When you create an array without specifying a datatype, PowerShell will create the array as an object array.
To determine the data type of an array:
$myFirstArray.gettype()
If you pipe an array to Get-Member, it will display information about the objects in the array. If you use Get-Member -InputObject, that will display information about the array itself:
get-member -inputobject $myFirstArray
Set values
To change values in an array after it has been created, use the assignment operator (=) to specify a new value.
$myFirstArray[4]=64
Alternatively use the SetValue method:
$myFirstArray.SetValue(64,4)
$myMultiArray[2][4]=128
Add one array to another. This creates a new array containing all the values from the first two arrays:
$firstFive=@(2, 3, 4, 5, 6) $secondFive=@(7, 8, 9, 10, 11, 12) $all = $firstFive + $secondFive
Delete an Array (by deleting the array variable)
$firstFive=@(2, 3, 4, 5, 6)
Remove-Item variable:firstFive
Please do not use ‘$’ symbol infront of variable.

コマンドレット対応表

No セクション PowerShell コマンドプロンプト Linux
1 ファイル・ディレクトリ関連 Get-ChildItem dir ls, dir
2 Get-ChildItem -Name dir /b ls -1
3 Get-ChildItem | Where-Object {$_.Attribute -eq “Directory”}
Get-ChildItem | Where-Object { $_.PSIsContainer }
dir /ad ls -F | grep /
4 Get-ChildItem | Sort-Object LastWriteTime dir /od ls -ltr
5 Get-ChildItem | Sort-Object LastWriteTime -Descending dir /o-d ls -lt
6 Get-Content type cat
7 Copy-Item copy cp
8 Copy-Item -Recurse xcopy
robocopy
cp -r
9 Remove-Item del
erase
rm
10 Move-Item move mv
11 Rename-Item ren mv
12 Get-ChildItem -Recurse -Name dir /b /s find .
13 (Get-Content 対象ファイル名 | Measure-Object).Count find /c /v “” wc -l
14 Get-Location cd
chdir
pwd
15 New-Item -ItemType Directory mk
mkdir
mkdir
16 Set-Location cd
chdir
cd
17 Remove-Item rd
rmdir
rmdir
18 Compare-Object (Get-Content ファイル名) (Get-Content ファイル名) fc diff
19 robocopy rsync
20 New-item -ItemType File ファイル名 type null > ファイル名 touch
21 (Get-Item ファイル名).LastWriteTime = (Get-Date) copy ファイル名 + touch
22 プロセス Get-Process tasklist ps
23 Stop-Process taskkill kill
24 Get-Process | Where-Object ($_.ProcessName -eq “プロセス名”) | % { Stop-Process $_.Id } taskkill /im killall
25 文字列操作 Select-String -CaseSensitive findstr grep
26 Select-String findstr /i grep -i
27 Get-Content ファイル名 | Sort-Object sort sort
28 Get-Content ファイル名 | Sort-Object | Get-Unique sort | uniq
29 文字列.Replace(“置換前文字列”, “置換後文字列”) tr
30 日付・時刻 Get-Date -Format yyyy/MM/dd date /t
echo %DATE%
date ‘+%Y/%m/%d’
31 Get-Date -Format hh:mm:ss time /t
echo %TIME%
date ‘+%T’
32 システム [Environment]::OSVersion ver
winver
systeminfo | findstr /b “OS”
uname -a
33 Get-WMIObject Win32_Processor | Format-List systeminfo cat /proc/cpuinfo
34 Get-WMIObject Win32_PhysicalMemory | Format-List systeminfo cat /proc/meminfo
35 logman sar
36 logman vmstat
37 logman iostat
38 Get-Help コマンドレット コマンド /? man
39 hostname hostname
40 taskmgr top
41 環境・シェル関連 Exit-PSSession exit exit
42 Get-ChildItem env: set env
43 Get-ChildItem env: set printenv
44 Write-Host echo echo
45 Clear-Host cls clear
46 Set-Alias
New-Alias
doskey 別名=コマンド alias
47 Get-History history
48 Get-Random %RANDOM% $RANDOM
49 Get-Command where which
50 $lastexitcode %ERRORLEVEL% $?
51 $PID $$
52 ユーザ query user
query user /server:ホスト名
who -u
53 whoami who am i
54 ネットワーク ipconfig /a ifconfig -a
55 netstat netstat
56 arp arp
57 ping ping
58 tracert traceroute
59 nslookup nslookup
60 その他 $NULL NUL /dev/null
61 Start-Sleep timeout /t 秒 /nobreak > nul sleep

作成したExcelを読み込むPowerShellスクリプト

readexcel.ps1

param($file)

# パラメタチェック
if ($file -eq $null) {
$thie = $MyInvocation.MyCommand.Name
“Usage: $this <Excel file>”
exit 1
}

# Excelファイルの有無チェック
if (!(Test-Path $file)) {
Write-Host $file not found.
exit 1
}

try {
$file = (Get-ChildItem $file).FullName
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false    # <- Excel非表示
$book = $excel.Workbooks.Open($file)
$sheet = $excel.Worksheets.Item(1)   # <- 1番目のシートを選択
$line = 1
while ($true) {
$item1 = $sheet.Cells.Item($line,1).Text
$item2 = $sheet.Cells.Item($line,2).Text
$item3 = $sheet.Cells.Item($line,3).Text
if ($item1 -eq “”) { berak }   # <- 空のセルを見つけたら終了
Write-Host “$item1, $item2, $item3”    # <- 取得した情報を表示
$line++
}
} catch [Exception] {
$exp = $error[0].ToString()
} finally {
$excel.Quit()
}

ExcelBook.xlsx
No TYPE OSNAME
1 Win Windows 95
2 Win Windows 98
3 Win Windows 2000
4 Win Windows XP
5 Win Windows 7
6 Win Windows 10
7 Linux Ubuntu
8 Linux CentOS
9 BSD FreeBSD
10 BSD OSX

PS D:\> .\readexcel.ps1 .\ExcelBook.xlsx

 

Download pdf file

# パラメータとして、ファイルを保存するパス、ダウンロードファイル・リストのファイル名を宣言
Param([String]$path=’C:\Scripts’, [String]$file=’list.dat’)
# ファイルをダウンロードするためのWebClientオブジェクトを生成
$cli = New-Object System.Net.WebClient
# ファイルリストから順にURLを抽出
# Get-Contentコマンドレットはファイルの内容を改行単位に読み込み、結果を文字列配列として返す。つまり、ここではGet-Contentコマンドレットによって得られた読み込み内容(=list.datで定義されたURLの配列)を、foreachループで順番に取得/処理しているというわけだ。
foreach($url in Get-Content $file){
# 取り出したURLからファイル名を取り出し、変数$fileにセット
$uri = New-Object System.Uri($url)
$file = Split-Path $uri.AbsolutePath -Leaf
# 指定されたURLからファイルをダウンロードし、同名のファイル名で保存
$cli.DownloadFile($uri, (Join-Path $path $file))
$file + “をダウンロード完了しました。”
}

usefull command

  1. Restart-Computer
  2. Stop-Computer
  3. check user account : Get-WmiObject Win32_UserAccount
  4. PowerShellでインストール済アプリケーション一覧を取得する : Get-WmiObject Win32_Product
  5. wait untill user press any key: $host.UI.RawUI.ReadKey(“NoEcho,IncludeKeyDown”)|out-null
  6. input data: $name = read-host “What is your name?”