PowerShellを使ってみた

ネタができたので、かなり久しぶりの更新。
EDCBの自動エンコードを考えていたら、PowerShellを使ってみようとなりました。
なのでPowerShellの導入を簡単に書いておきます。
しょぼいbatぐらいしか書けない人対象ですのであしからず。
PowerShellとは
PowerShellとはcmdとWSHの良いとこどりしたような、次世代Windowsのシェル環境です。
Windows PowerShellコマンド&スクリプティング入門:PowerShellの基本(前編)
.NET Frameworkクラス・ライブラリとの連携が可能!
とは言っても自分もほとんど分かっていないのですが。cmdより高度な操作が可能です。
cmdと同じで簡単な事ならあまり勉強しなくてもなんとなくできます。
PowerShellを使用するには
・PowerShell
・.NET Framework 3.5以上
の上記二つをインストールする必要がありますがWindows7以上であれば、
どちらも標準で搭載しているのでインストールする必要はありません。
PowerShell以下の方法で起動できます。
1.「Windows ロゴ キー + R」から[ファイル名を指定して実行]を開く
2.「powershell」と入力

cmdと似てますがこれがpowershellのコンソールです。
「notepad」と入れればメモ帳を起動できますし、
「cmd /c '内部コマンドのコマンドライン'」と入れれば、cmd内部コマンドも使用可能です。
天地有情 PowerShell から外部プログラムを実行する
PowerShellのセキュリティポリシー
PowerShellスクリプトファイルの拡張子は「.ps1」になります。
以下の点がまず最初の注意点となります。
1.デフォルトの状態ではすべてのスクリプトの実行ができない
2. ps1ファイルをダブルクリックしても実行されない(メモ帳が開く)
と言う部分です。悪意のあるウイルスの実行を防ぐためらしいです。
しかしこれではスクリプトの実行ができません。
1.に関しては「実行ポリシー」を変更する事によって使用が可能になります。
この中ではRemoteSignedがセキュリティ的にも現実的な実行ポリシーとなるので、
実行ポリシーをRemoteSignedに変更する事にします。
PowerShellスクリプトの実行セキュリティ・ポリシーを変更する
実行ポリシーをRemoteSignedに変更する
まず、ポリシーを変更するには管理者権限でコンソールを実行する必要があります。
PowerShellの実行ファイルは以下に保存されています。
C:\WINDOWS\system32\windowspowershell
実行ファイルを見つけたら右クリックから「管理者として実行」から起動します。
実行ポリシーを変更するには以下のコマンドレットを使います。
1. 最初にGet-ExecutionPolicyを実行して現在のポリシーの確認(⇒Restricted と表示)
2. Set-ExecutionPolicy RemoteSignedを実行
3. 変更するか聞かれるので「[Y]はい」を選択し実行
4.最後にGet-ExecutionPolicyを実行してRemoteSignedと表示されるのを確認する。
これで実行ポリシーの変更は完了です。
.PS1を簡単に実行したい
これでローカルにあるスクリプトの使用が可能となるのですが、
使用するにはコンソールから起動、若しくは、
.ps1を右クリックして、「PowerShellで実行」でも実行が可能です。
しかしこれでは不便、batのようにダブルクリックで実行したいです。
以下のbatを作成すればbatをダブルクリックしてからps1を実行できるようになります。
これだけ簡単!
因みにbatの作成は上記コマンドをtxt保存して拡張子をbatに変えるだけ。
「powershell.exe *.ps1 」とすればcmdからでもps1を実行する事ができます。
他にもショートカットで実行させる方法もあるようです。
PowerShellスクリプトへのショートカットを作成する - @IT
どうやらレジストリを変更してps1をそのままダブルクリックして
起動する方法もあるみたいですが、面倒なのでやっていません。気になる方はググって下さい。
PowerShellの統合開発環境
スクリプトファイルを作成するなら、PowerShell用の統合開発環境を使いましょう。
入力支援機能など普通のエディタで書くより便利です。
1.「Windows ロゴ キー + R」から[ファイル名を指定して実行]を開く
2.「powershell_ise」と入力

するとコンソールではなくWindows PowerShell ISEと言う公式エディタが起動します。
統合開発環境「PowerShell ISE」を使ってみよう (1/2):CodeZine
PowerShellを使ってみる
PowerShell基礎文法最速マスター - PowerShell Scripting Weblog
Windows PowerShell 入門(1)-基本操作編 (1/2):CodeZine
ゼロからはじめるWindows PowerShell - コマンドレット編 (1)
Windows PowerShellコマンド&スクリプティング入門:PowerShellの基本(前編)
とりあえず上を読んでみるとが良いかと思います。正直まだ全然わかっていないのです。さーせん
batくらいしかかけない者として面白かったのは配列。(別にこれに限った事じゃないですが)
こことか読んだことはありましたが、実際に必要になって便利さが分かりました。
簡単に説明してみます。
・コメントと変数
まず、「#」と入力するとそれ以降のその行はコメントとなり実行に影響しません。
変数は以下の様に「$」の後に変数名を書き、入れたい情報を設定します。
・配列設定と追加
配列とするには以下のよう「,」で区切ります。
配列を呼び出すには変数名の後に[数値]を書きます。(最初の数値は"0"です。)
右辺を@()とするとその配列は空配列となります。
配列に値を追加するには「+=」とすれば既存の配列に追加ができます。
配列が良いのは1つの変数で複数の値を持てることで、大量の変数を作る必要がありません。
・コマンドレット
次に、コマンドレットについて簡単に。
そもそもコマンドレットは何かというと、自分もよくわかってないのですが、
これを使えばbatでは不可・困難な処理を短いコードで実現する事ができます。
PowerShellのGet-ChildItemコマンドレットでファイル名の一覧を取得する
コマンドレットはたくさんありますが、以下のコマンドレットを使ってみます。
ようは特定のフォルダからファイルのパスなどを取得できるコマンドレットです。
下のコマンドを実行すると、
この様な感じでDドライブ直下のデータが$Dateの中に配列として格納された事になります。
これらは「FileInfoオブジェクト群」と呼ばれています。
例えば絶対パスが欲しい場合、上のオブジェクト群では激しく使いづらい。と言うか使えない。
その場合は前のコマンドを()で囲み、「FullName」と言うオプションを使用すれば,
ドライブD直下のファイルのフルパスが取得できます。
配列が良いのは取得した値を変数に設定したい場合、
状況によって設定個数が変化しても1つの変数で対応できるところですかね。
こんなところで終わりです。相当複雑な事も可能なので、
batは物足りないけど簡単な奴が良いと言う人は触ってみるといいかもです。
ではでは
スポンサーリンク PowerShellとはcmdとWSHの良いとこどりしたような、次世代Windowsのシェル環境です。
Windows PowerShellコマンド&スクリプティング入門:PowerShellの基本(前編)
.NET Frameworkクラス・ライブラリとの連携が可能!
とは言っても自分もほとんど分かっていないのですが。cmdより高度な操作が可能です。
cmdと同じで簡単な事ならあまり勉強しなくてもなんとなくできます。
PowerShellを使用するには
・PowerShell
・.NET Framework 3.5以上
の上記二つをインストールする必要がありますがWindows7以上であれば、
どちらも標準で搭載しているのでインストールする必要はありません。
PowerShell以下の方法で起動できます。
1.「Windows ロゴ キー + R」から[ファイル名を指定して実行]を開く
2.「powershell」と入力

cmdと似てますがこれがpowershellのコンソールです。
「notepad」と入れればメモ帳を起動できますし、
「cmd /c '内部コマンドのコマンドライン'」と入れれば、cmd内部コマンドも使用可能です。
天地有情 PowerShell から外部プログラムを実行する
PowerShellのセキュリティポリシー
PowerShellスクリプトファイルの拡張子は「.ps1」になります。
以下の点がまず最初の注意点となります。
1.デフォルトの状態ではすべてのスクリプトの実行ができない
2. ps1ファイルをダブルクリックしても実行されない(メモ帳が開く)
と言う部分です。悪意のあるウイルスの実行を防ぐためらしいです。
しかしこれではスクリプトの実行ができません。
1.に関しては「実行ポリシー」を変更する事によって使用が可能になります。
Restricted | 全てのスクリプトの実行禁止。デフォルト設定。 |
AllSigned | 署名されているスクリプトのみ実行可能。 |
RemoteSigned | ローカルに保存されているスクリプトは実行可能。 ネットからDLしたものは署名されている物のみ |
Unrestricted | すべてのスクリプトが実行可能。 ネットからDLしたものは実行するかどうか確認される。 |
この中ではRemoteSignedがセキュリティ的にも現実的な実行ポリシーとなるので、
実行ポリシーをRemoteSignedに変更する事にします。
PowerShellスクリプトの実行セキュリティ・ポリシーを変更する
実行ポリシーをRemoteSignedに変更する
まず、ポリシーを変更するには管理者権限でコンソールを実行する必要があります。
PowerShellの実行ファイルは以下に保存されています。
C:\WINDOWS\system32\windowspowershell
実行ファイルを見つけたら右クリックから「管理者として実行」から起動します。
実行ポリシーを変更するには以下のコマンドレットを使います。
Get-ExecutionPolicy | 現在の実行ポリシーを確認 |
Set-ExecutionPolicy RemoteSigned | 実行ポリシー”RemoteSigned”に設定 |
1. 最初にGet-ExecutionPolicyを実行して現在のポリシーの確認(⇒Restricted と表示)
2. Set-ExecutionPolicy RemoteSignedを実行
3. 変更するか聞かれるので「[Y]はい」を選択し実行
4.最後にGet-ExecutionPolicyを実行してRemoteSignedと表示されるのを確認する。
これで実行ポリシーの変更は完了です。
.PS1を簡単に実行したい
これでローカルにあるスクリプトの使用が可能となるのですが、
使用するにはコンソールから起動、若しくは、
.ps1を右クリックして、「PowerShellで実行」でも実行が可能です。
しかしこれでは不便、batのようにダブルクリックで実行したいです。
以下のbatを作成すればbatをダブルクリックしてからps1を実行できるようになります。
@echo off powershell.exe "起動したいスクリプトのフルパス.ps1" |
因みにbatの作成は上記コマンドをtxt保存して拡張子をbatに変えるだけ。
「powershell.exe *.ps1 」とすればcmdからでもps1を実行する事ができます。
他にもショートカットで実行させる方法もあるようです。
PowerShellスクリプトへのショートカットを作成する - @IT
どうやらレジストリを変更してps1をそのままダブルクリックして
起動する方法もあるみたいですが、面倒なのでやっていません。気になる方はググって下さい。
PowerShellの統合開発環境
スクリプトファイルを作成するなら、PowerShell用の統合開発環境を使いましょう。
入力支援機能など普通のエディタで書くより便利です。
1.「Windows ロゴ キー + R」から[ファイル名を指定して実行]を開く
2.「powershell_ise」と入力

するとコンソールではなくWindows PowerShell ISEと言う公式エディタが起動します。
統合開発環境「PowerShell ISE」を使ってみよう (1/2):CodeZine
PowerShellを使ってみる
PowerShell基礎文法最速マスター - PowerShell Scripting Weblog
Windows PowerShell 入門(1)-基本操作編 (1/2):CodeZine
ゼロからはじめるWindows PowerShell - コマンドレット編 (1)
Windows PowerShellコマンド&スクリプティング入門:PowerShellの基本(前編)
とりあえず上を読んでみるとが良いかと思います。正直まだ全然わかっていないのです。さーせん
batくらいしかかけない者として面白かったのは配列。(別にこれに限った事じゃないですが)
こことか読んだことはありましたが、実際に必要になって便利さが分かりました。
簡単に説明してみます。
・コメントと変数
まず、「#」と入力するとそれ以降のその行はコメントとなり実行に影響しません。
変数は以下の様に「$」の後に変数名を書き、入れたい情報を設定します。
$hoge1 = "abc" #「"」で囲むと文字として扱われる $hoge2 = 123 #そのまま数値として扱われる $hoge1 #「abc」が表示される |
・配列設定と追加
配列とするには以下のよう「,」で区切ります。
配列を呼び出すには変数名の後に[数値]を書きます。(最初の数値は"0"です。)
右辺を@()とするとその配列は空配列となります。
$hoge = @(1,2,3) #下も意味は同じ $hoge = 1,2,3 $hoge[0] #「1」が表示される $hoge[1] #「2」が表示される $hoge[2] #「3」が表示される $hoge = @() #配列を空にします。 |
配列に値を追加するには「+=」とすれば既存の配列に追加ができます。
配列が良いのは1つの変数で複数の値を持てることで、大量の変数を作る必要がありません。
$hoge = 1,2 $hoge += 3,4 $hoge[0] #「1」が表示される $hoge[1] #「2」が表示される $hoge[2] #「3」が表示される $hoge[3] #「4」が表示される |
・コマンドレット
次に、コマンドレットについて簡単に。
そもそもコマンドレットは何かというと、自分もよくわかってないのですが、
これを使えばbatでは不可・困難な処理を短いコードで実現する事ができます。
PowerShellのGet-ChildItemコマンドレットでファイル名の一覧を取得する
コマンドレットはたくさんありますが、以下のコマンドレットを使ってみます。
Get-ChildItem | 1 つ以上の指定された場所から項目および子項目を取得します。 |
下のコマンドを実行すると、
$Data = Get-ChildItem "D:\" $Data |
この様な感じでDドライブ直下のデータが$Dateの中に配列として格納された事になります。
これらは「FileInfoオブジェクト群」と呼ばれています。
Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2014/01/22 22:45 hogepiyo d---- 2014/02/03 19:11 Recovery.txt d---- 2014/03/03 0:12 Windows Logon Sound.wav |
例えば絶対パスが欲しい場合、上のオブジェクト群では激しく使いづらい。と言うか使えない。
その場合は前のコマンドを()で囲み、「FullName」と言うオプションを使用すれば,
ドライブD直下のファイルのフルパスが取得できます。
$Data = (Get-ChildItem "D:\").FullName $Data |
#結果 D:\hogepiyo D:\Recovery.txt D:\Windows Logon Sound.wav |
配列が良いのは取得した値を変数に設定したい場合、
状況によって設定個数が変化しても1つの変数で対応できるところですかね。
$Data = (Get-ChildItem "D:\").FullName $Data[0] $Data[2] |
#結果 D:\hogepiyo D:\Windows Logon Sound.wav |
こんなところで終わりです。相当複雑な事も可能なので、
batは物足りないけど簡単な奴が良いと言う人は触ってみるといいかもです。
ではでは
- 関連記事
-
- 【PowerShell】指定フォルダからファイル名を取得しリネームする
- PowerShellを使ってみた
| powershell | 00:42 | comments:0 | trackbacks:0 | TOP↑