• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

private knowhow


Commit MetaInfo

修订版968eb211b9bcac38d43c316fd4092807c7ecd349 (tree)
时间2014-01-25 18:30:35
作者oga <hyperoga@gmai...>
Commiteroga

Log Message

2014/01/25 add Win PowerShell Knowhow Ver0.01

更改概述

差异

--- /dev/null
+++ b/powershell.txt
@@ -0,0 +1,283 @@
1+Power Shellノウハウ
2+
3+1. 基本
4+(1)PowerShellスクリプトの拡張子 *.ps1
5+(2)*.ps1の実行を許可する
6+PS > Set-ExecutionPolicy RemoteSigned
7+
8+実行ポリシー 概要
9+Restricted すべてのスクリプトを実行不可
10+AllSigned すべてのスクリプトに証明書を要求
11+RemoteSigned インターネット経由でダウンロードしたスクリプトのみ証明書を要求
12+Unrestricted すべてのスクリプト実行を許可(ただしインターネット経由でダウンロードしたコードは実行確認のみあり)
13+
14+(3)予約変数
15+$_ :(パイプライン経由で渡されたオブジェクト)
16+
17+ 関数に渡された名前なし引数は自動変数$Args(配列)に登録されるので、
18+ あとは「$Args[0]」のように指定することで、与えられた引数値にアクセス
19+ することができる。
20+ なおJavaScriptなどの言語に慣れている方は、自動変数$Argsには関数に
21+ 渡されたすべての引数値(名前付き引数/名前なし引数の双方)が含まれ
22+ るように思われるかもしれないが、PowerShellではあくまで名前なし引数
23+ だけしか含まれない。
24+
25+(4)スコープ
26+ スクリプト内の関数をスクリプト外から利用する場合
27+ 「global:」を付加する。スクリプト実行後PSプロンプトから
28+ 関数を利用できる。
29+ bashで. <script>を行ったのと同じ効果
30+
31+PS> cat tri.ps1
32+function global:Triangle([double] $width=1, [double] $height=1) {
33+ return $width * $height / 2
34+}
35+
36+PS> ./tri.ps1
37+PS> Triangle 6 2 (コールできる)
38+
39+
40+(5)プロファイル
41+ (a)全ユーザ共通プロファイル
42+「C:\WINDOWS\SYSTEM32\windowspowershell\v1.0」フォルダ配下にprofile.ps1
43+ という名前でスクリプト・ファイルを配置しておく。
44+ これによってPowerShellの起動時にProfile.ps1が自動実行され、
45+(例えば)関数やエイリアスの登録を行うことができる(*)。
46+
47+* なお、profile.ps1の内容はすべてグローバル・スコープで登録される。
48+従って、明示的にスコープ修飾子によるスコープ宣言を行う必要はない。
49+
50+ (b)ユーザ固有プロファイル
51+ 「C:\Documents and Settings\<ユーザー名>\My Documents\WindowsPowerShell」
52+ フォルダにprofile.ps1を配置
53+
54+2. 各仕様
55+(1)引数の受け取り
56+
57+Param([string] $name)
58+Write-Output "こんにちは、 $name さん!"
59+
60+PS > ./Hello.ps1 "山田"
61+こんにちは、 山田 さん!
62+PS > ./Hello.ps1 -name "山田"
63+こんにちは、 山田 さん!
64+
65+(2)コメント
66+#
67+
68+
69+(3)変数
70+ $var
71+ ${var}
72+
73+(4)データ型
74+ データ型はないが明示することもできる
75+ [System.Int32] $x = 10
76+
77+型名にはエイリアスが用意されている。
78+エイリアス .NET Frameworkの型名
79+byte System.Byte
80+int System.Int32
81+long System.Int64
82+single、float System.Single
83+double System.Double
84+decimal System.Decimal
85+char System.Char
86+bool System.Boolean
87+string System.String
88+array System.Array
89+xml System.Xml.XmlDocument
90+type System.Type
91+PowerShellの型エイリアス
92+
93+(5)標準出力
94+PS > Write-Output "私の名前は $name です。"
95+私の名前は 山田 です。
96+PS > Write-Output '私の名前は $name です。'
97+私の名前は $name です。
98+
99+(6)エスケープシーケンス
100+エスケープ文字は\ではなく`(バッククォート)
101+
102+エスケープ・シーケンス 概要
103+`b バックスペース
104+`n 改行
105+`r キャリッジ・リターン
106+`t タブ
107+
108+(7)ヒアドキュメント
109+PS > $body=@"
110+>> こんにちは、WINGSの山田です。
111+>> PowerShellの世界をご一緒に楽しみましょう。
112+>> "@
113+>> ……ここで[Enter]キーのみを入力して終了する
114+
115+PS > Write-Output $body
116+こんにちは、WINGSの山田です。
117+PowerShellの世界をご一緒に楽しみましょう。
118+
119+「@"<改行>〜<改行>"@」(または「@'<改行>〜<改行>'@」)
120+
121+(8)配列と連想配列
122+配列
123+ 要素, 要素, 要素, ...
124+ または、@(要素, 要素, 要素, ...)
125+ 参照
126+ $変数名[インデックス番号]
127+
128+連想配列
129+ @{キー名=値; キー名=値; ...}
130+ 参照
131+ $変数名["キー名"]
132+ または、
133+ $変数名.キー名
134+
135+
136+PS > $x = 1,2,3
137+PS > Write-Output $x[0]
138+1 ……0番目の要素を出力
139+
140+PS > $z = @{FirstName="Yoshihiro"; LastName="Yamada"; Birth="Shizuoka"}
141+PS > Write-Output $z["FirstName"]
142+Yoshihiro ……FirstName要素を出力
143+PS > Write-Output $z.FirstName
144+Yoshihiro ……FirstName要素を出力
145+
146+
147+
148+(9)分岐
149+$x = 100
150+if($x -ge 80){
151+ Write-Output '変数$xは80以上です。'
152+}elseif($x -ge 40){
153+ Write-Output '変数$xは40以上80未満です。'
154+}else{
155+ Write-Output '変数$xは40未満です。'
156+}
157+
158+(10)switch
159+$x = 1
160+switch($x){
161+ 1 {Write-Output '変数$xは1です。'}
162+ 1 {Write-Output '変数$xは1です。その2'}
163+ 2 {Write-Output '変数$xは2です。'}
164+ 3 {Write-Output '変数$xは3です。'}
165+ default {Write-Output '変数$xは1、2、3ではありません。'}
166+}
167+
168+複数マッチをしたくない場合
169+switch($x){
170+ 1 {
171+ Write-Output '変数$xは1です。'
172+ break
173+ }
174+ 1 {
175+ Write-Output '変数$xは1です。(2)'
176+ break
177+ }
178+ 3 {
179+ Write-Output '変数$xは3です。'
180+ break
181+ }
182+ default {Write-Output '変数$xは1、2、3ではありません。'}
183+}
184+
185+$x = "XYZ"
186+switch -wildcard ($x){
187+ "X*" {Write-Output '変数$xは"X"で始まります。'}
188+ "X_" {Write-Output '変数$xは"X"+1文字です。'}
189+ "XA*" {Write-Output '変数$xは"XA"で始まります。'}
190+}
191+
192+(11)forループ
193+$ary=@(100,120,300)
194+for($i=0; $i -lt 3; $i++){
195+ $sum += $ary[$i];
196+}
197+Write-Output $sum
198+
199+(12)foreach系ループ
200+$ary=@(100,120,300)
201+foreach($dat in $ary){
202+ $sum += $dat;
203+}
204+Write-Output $sum
205+
206+@(100,120,300) | ForEach-Object {$sum += $_}
207+Write-Output $sum
208+
209+
210+(13)whileループ
211+$i=0;
212+$sum=0;
213+$ary=@(100,120,300)
214+while($i -lt 3){  ……変数$iが3未満の場合の間、ループを継続
215+ $sum += $ary[$i];
216+ $i++;
217+}
218+Write-Output $sum
219+
220+$i=0;
221+$sum=0;
222+$ary=@(100,120,300)
223+do{
224+ $sum += $ary[$i];
225+ $i++;
226+}while($i -lt 3)  ……変数$iが3未満の場合の間、ループを継続
227+Write-Output $sum
228+
229+(14)関数
230+function Triangle([double] $width=1, [double] $height=1) {
231+ return $width * $height / 2
232+}
233+
234+型チェックが不要なら型は書かなくてもよい。
235+以下の形で引数を受け取ることもできる。
236+
237+function Triangle {
238+ return $Args[0] * $Args[1] / 2
239+}
240+
241+
242+<呼び出し>
243+Triangle 2 6  # 底辺2 高さ6 結果(面積)は 6 と表示される 
244+
245+Triangle -width 2 -height 6 # という呼び出し方もできる。
246+
247+function 関数名 [(引数[=デフォルト値],...)] {
248+ 関数の本体
249+ [return 戻り値]
250+}
251+
252+
253+3. .NET Frameworkクラス・ライブラリの利用方法
254+.NET Frameworkが提供するクラスをインスタンス化して、
255+スクリプトの中で利用することも可能。
256+これによって、スクリプト上でVisual BasicやC#と
257+限りなく同等の操作を行うことができる
258+
259+
260+
261+
262+
263+(例1)電子メール
264+ # 電子メールのメッセージを作成
265+$mail = New-Object System.Net.Mail.MailMessage("あて先@example.jp","送信元@example.co.jp") ……(1)
266+$mail.Subject = "PowerShellスクリプティング入門" # 件名
267+$mail.Body = @"
268+こんにちは、PowerShell!
269+PowerShellでスクリプティングに挑戦しましょう。
270+"@ # 本文
271+ # 件名/本文の文字エンコーディング
272+$mail.SubjectEncoding = [System.Text.Encoding]::GetEncoding("ISO-2022-JP")
273+$mail.BodyEncoding = [System.Text.Encoding]::GetEncoding("ISO-2022-JP")
274+ # 指定されたSMTPサーバで電子メールを送信
275+$smtp = New-Object System.Net.Mail.SmtpClient("smtp.examples.ne.jp")
276+$smtp.Send($mail)
277+
278+
279+
280+
281+
282+
283+