Powershellの最初の設定
2016/4/20 加筆変更
Windows10が登場したので、更新することにした。Windows10で利用されているpowershell5.0を前提に書きたい。
バージョンを確認したいなら、psversiontableの内容を確認すればよい。
echo $psversiontable
まず、管理者権限でpowershellを起動し、以下を実行する。
PS C:\WINDOWS\system32> Get-ExecutionPolicy Restricted
最初の設定では、スクリプトファイルが読み込めない設定(Restricted)となっている。
これを、ローカル以外のスクリプトのみ、証明書が必要な設定(RemoteSigned)に変更する。大抵はこの設定が必要十分なはずだ。
なお、今回は、管理者権限で、一気に権限を与えているが、複数ユーザーを細かく制御したい場合、方法は変わってくるだろう。(権限をユーザーごとに設定することもできる)
PS C:\WINDOWS\system32> Set-ExecutionPolicy RemoteSigned
Windows8までは、実行ポリシーの変更のときに、追加で色々質問が出てきたが、10になってから、特に何も表示されず、すぐ変更されるようになった。(厳密に10からなのかは不明)
もう一度、権限を確かめてみると、RemoteSignedになっていればOK。
PS C:\WINDOWS\system32>Get-ExecutionPolicy RemoteSigned
ここで、一度管理者権限で入ったPowershellを抜けて、利用しているユーザーでpowershellを起動する。
まず、プロファイルを設定する。プロファイルは、ユーザーごとに設定でき、コンソールの起動時に読み込まれる。
更に、powershellのコマンドを起動した場合と、powershell_iseを起動した場合で、読み込まれるプロファイルが違ってくるのだが、共通で読み込まれるものもある。
大抵の場合は、共通で読み込まれるものをユーザーごとに用意しておけば事足りるだろう。
おもむろに下記を実行すると、環境変数の一覧が表示される。
ls env:
すると、USERPROFILEの値が、C:\Users\<ユーザー名>のような、割りと便利な値になっている。
で、echo $profileとすると、通常は、<上記パス>\Microsoft.PowerShell_profile.ps1などのユーザーごとでさらにコンソールの種類ごとのものが設定されているのだが、今回これはあまり使う気がないので、似たような名前として$_profileという変数を用意してやって、それをProfile.ps1に割り当ててしまおう。
$_profile = $env:userprofile + "\Documents\WindowsPowerShell\Profile.ps1" $_profileDir = $env:userprofile + "\Documents\WindowsPowerShell" #PSModulePathに記載されているディレクトリの一つを掘る。 mkdir -Force ( $_profileDir + "\Modules" ) #自動読み込み用のディレクトリを掘る。 mkdir -Force ( $_profileDir + "\autoload" )
さて、そうしたら、Profile.ps1の中身を編集していく。もともとProfile.ps1をどこかに用意していれば、他環境でもそれをなるべく流用できるような形で使いたい。とりあえずメモ帳で開こう。
notepad $_profile
内容は下記のような感じ。$_profileと、$_profileDirを定義して、あとは、さっき作ったautoloadディレクトリの中のps1ファイルを全部読み込むようにする。下記有名サイトの方法などを参考にしている。(ちょっと端折った)
参考:
PowerShell で Profile を利用して スクリプトの自動読み込みをしてみよう - tech.guitarrapc.cóm
あとこことかも
Enhance your PowerShell experience by automatically loading scripts
$_profile = $env:userprofile + "\Documents\WindowsPowerShell\Profile.ps1" $_profileDir = $env:userprofile + "\Documents\WindowsPowerShell" #PSModulePathに記載されているディレクトリの一つを掘る。 mkdir -Force ( $_profileDir + "\Modules" ) >$null #自動読み込み用のディレクトリを掘る。 mkdir -Force ( $_profileDir + "\autoload" ) >$null Get-ChildItem "$_profileDir\autoload\*.ps1" | %{.$_} echo "autoload complete!"
一度 ドットソースで読み込んでおく。
. $_profile
さて、あまり$_profileそのものを弄りたくはないので、ここからはautoloadの方をいじることにする。
まずロギングをしたい。しかも最初の方で呼ばれてほしいので、0_logging.ps1というのをつくる。
cd $_profileDir\autoload notepad 0_logging.ps1
ログを書き出すディレクトリはここでは、D:\log\powershell\<今日の日付>.logとしよう。
そして、先ほどのファイルに、以下の内容を記載する。
$today = Get-Date -format yyyyMMdd Get-Date Start-Transcript -path "D:\log\powershell\$today.log" -append
これで、powershellの起動と同時に実行ログを書いてくれる。シェルを閉じるとき、Stop-Transcriptとしてから、exitとするようにするのがいい。(まあ別にそのまま閉じても問題ないが、ログの見易さの問題。)
またあとでもう少し書き足すかも。