sabakanse @ ウィキ
http://w.atwiki.jp/sabakanse/
sabakanse @ ウィキ
ja
2017-11-22T18:36:37+09:00
1511343397
-
イベントログへの書き込み
https://w.atwiki.jp/sabakanse/pages/32.html
スクリプトでエラーが発生したらイベントログに書き込むというのも手かなとおもいます。
書き込みは Write-EventLog コマンドレットで行えますが、事前にイベントソースの登録などが必要になります。
イベントソースの登録。
New-EventLog -LogName Application -Source SourceName
イベントソースの削除。やらなくても良いけど。
Remove-EventLog -Source SourceName
イベントログの書き込み。
Write-EventLog -LogName Application -EntryType Error -Source SourceName -EventId 1 -Category 0 -Message 'ログの中身'
スクリプトの最後とかで、エラーをイベントログに書くみたいな。
if($Error -ne $null -and $Error.Count -ne 0 ){
if ([System.Diagnostics.EventLog]::SourceExists("HogeHoge") -eq $false){
New-EventLog -LogName Application -Source HogeHoge
# ソースを削除する場合
# Remove-EventLog -Source HogeHoge
}
$Error | % {Write-EventLog -LogName Application -EntryType Error -Source HogeHoge -EventId 1 -Message $_ -Category 0 }
}
引用
[[SE の雑記 PowerShellでイベントログに情報を出力>https://blog.engineer-memo.com/2014/04/12/powershell%E3%81%A7%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%AD%E3%82%B0%E3%81%AB%E6%83%85%E5%A0%B1%E3%82%92%E5%87%BA%E5%8A
2017-11-22T18:36:37+09:00
1511343397
-
python
https://w.atwiki.jp/sabakanse/pages/31.html
かなり雑なメモ。役に立たない。
*環境構築
cygwin上でpython環境を構築してみる。
**参考:
+ http://qiita.com/makkausu4130/items/d78954d8ec09f1c5153f
+ http://chiranoura.nobody.jp/articles/2014-03-04_01_how_to_install_pip_and_setuptools/
**インストールの前に
+独自に色々やって失敗したので、python系パッケージをいったんアンインストール。
$ apt-cyg show | grep python | xargs apt-cyg remove
$ apt-cyg show | grep python2 | xargs apt-cyg remove
$ apt-cyg show | grep python3 | xargs apt-cyg remove
**インストール
pythonのパッケージ管理ツールでpipというのが一般的?らしい。~
pipはsetuptools(easy_install)というツールも必要なので、setuptoolsを入れる。~
pipはsetuptoolsの拡張的な?~
$ apt-cyg install python3
$ apt-cyg install python3-setuptools
$ easy_install-3.6 pip
**virtualenv
pythonの環境を仮想化してpythonのバージョンや読み込むライブラリやそのバージョンを環境ごとに変えることが出来るようになる。
***インストール
$ pip install virtualenv
***仮想環境の作成
p1フォルダーに仮想環境を作成。
$ virtualenv p1
以下のように '--no-site-packages'をつけて実行すると、導入済みのモジュールを除外して仮想環境を作れるらしい。
$ virtualenv --no-site-packages p1
***仮想環境に入る
$ source ~/p1/bin/activate
抜けるには
$ deacti
2017-10-20T13:49:46+09:00
1508474986
-
cygwin
https://w.atwiki.jp/sabakanse/pages/30.html
*コマンドメモ
----
**apt-cyg
通常cygwinではパッケージのインストール・アンインストールはsetupから行うが、コマンドラインから行えるようになる。~
更新コマンド(upgrade?)は無いので、remove-installで更新するっぽい。
-パッケージ情報の更新。
apt-cyg update
- インストール
apt-cyg install <PackageName>
- アンインストール
apt-cyg remove <PackageName>
2017-08-22T09:54:39+09:00
1503363279
-
クラスを作る
https://w.atwiki.jp/sabakanse/pages/29.html
クラスを作ってみます。~
クラスといってもメソッドの無い、POCOのようなクラスです。
Select-Object -InputObject (New-Object System.Object) -Property aaa, bbb, ccc
上の1行でObjectクラスを作って、Select-Objectで存在しないプロパティーを引くことでメンバーを作ってくれるみたいです。~
構文的に良いのかどうか分からないですが、簡単なのでこんな風にやってます。
# メンバーに aaa, bbb, ccc を持つクラスを作成。
$o = Select-Object -InputObject (New-Object System.Object) -Property aaa, bbb, ccc
Get-Member -InputObject $o
$o.aaa = "aiueo"
$o.bbb = 123
$o.ccc = Get-Date
$o | Format-List
Get-Member -InputObject $o
実行結果
(最初のGet-Memberの結果)
TypeName: Selected.System.Object
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
aaa NoteProperty aaa=null
bbb NoteProperty bbb=null
ccc NoteProperty ccc=null
(Format-Listの結果)
aaa : aiueo
bbb : 123
ccc :
2017-03-29T13:23:31+09:00
1490761411
-
PowerCLI
https://w.atwiki.jp/sabakanse/pages/28.html
VMWareをPowerShellで管理するコマンドラインインターフェースのPowerCLIを触ったのでメモる。
*基本的な枠組み
基本的な枠はこんな感じ。
-スナップイン(PowerShell用のライブラリみたいなもの?)を読み込む。(事前にインストールしてください)
-VCeneterに接続。VCeneterではなく、ESXにも繋げられるのかな?
-tryブロックに処理を書く。
-finallyブロックで接続を解除。
# SnapInを追加。追加済みの場合にエラーを出さないようにしてる。(出しても問題ないけど)
$snapin = Get-PSSnapin | ? { $_.Name -eq 'VMware.VimAutomation.Core'}
if( $snapin -eq $null ){
Add-PSSnapin VMware.VimAutomation.Core
}
# VCenterに接続
$VIServer = Connect-VIServer -Server $vCenter -Username $vcUser -Password $vcPass
try{
# 処理を書く
}
finally{
# 接続解除
Disconnect-VIServer -Server $VIServer -Confirm:$false
Remove-PSSnapin VMware.VimAutomation.Core
}
*主なコマンドレット
|コマンドレット|備考|h
|Get-VM|仮想マシンを取得|
|○○-VM|上記Getの他に、New,Remove,Set,Move,Start,Stop,Suspend,Restartなどがある。&br;名前で大体わかりますね。|
|Get-VMHost|仮想化ホストを取得|
|○○-VM|上記Getの他に、Add,Move,Remove,Restart,Set,Start,Stop,Suspendなどがある。|
どんなフィールドがあるかはGet-Memberで確認できます。
Get-VM -Name 'ServerName' | Get-Member
2016-04-26T09:02:38+09:00
1461628958
-
スクリプトファイルの実行設定
https://w.atwiki.jp/sabakanse/pages/26.html
*スクリプトファイルの実行設定
powershellは既定ではスクリプトファイルの実行を許可していません。
許可するために ExecutionPolicyを変更する必要があります。
コマンドはこれ
Set-ExecutionPolicy Unrestricted
Unrestrictedは何でもOKになります。~
他にも署名付のみ許すとかあるみたいですが…~
~
~
~
~
~
~
~
2014-03-13T14:16:04+09:00
1394687764
-
ファイル出力
https://w.atwiki.jp/sabakanse/pages/25.html
*Out-File
まずは Out-Fileコマンドレットでファイルに出力。
Get-Service | Ouf-File -FilePath "Services.txt" -Encoding UTF8
Apependをつけると追加出力
Get-Service | Ouf-File -FilePath "Services.txt" -Encoding UTF8 -Append
ファイル名に日付を入れたり。
$filePath = ".\Services_$((Get-Date).ToString('yyyyMMddHHmmss')).txt"
Get-Service | Ouf-File -FilePath filePath -Encoding UTF8 -Append
2014-01-25T21:21:59+09:00
1390652519
-
メールを送る
https://w.atwiki.jp/sabakanse/pages/24.html
.Net Framework のMailオブジェクトを使っても良いのですが、Send-MailMessageで送ってみます。~
~
だいたいこんな感じです。
Send-MailMessage -SmtpServer <SMTPサーバー> -From <送信元アドレス> -To <アドレス配列> -Cc <アドレス配列> `
-Subject <件名> -Body <本文>
宛先などを ";"(セミコロン)で区切った文字列で設定を持つ場合は、こんな感じで。
-To ("hogehoge@hoge.com;foobaa.hoge.com" -split ";")
そして少し手こずったエンコード指定。ヘルプはこう書いてあるのですが…
-Encoding <Encoding>
本文と件名に使用されるエンコードを指定します
有効な値は、ASCII、UTF8、UTF7、UTF32、Unicode、BigEndianUnicode、Default、
および OEM です。ASCII が既定値です。
~-Encoding UTF8 で実行すると…
Send-MailMessage : パラメーター 'Encoding' をバインドできません。
"UTF8" の値を "System.String" 型から "System.Text.Encoding" 型に変換できません。
怒られる…~
で調べた結果。
$enc = [System.Text.Encoding]::UTF8
Send-MailMessage -Encoding $enc …
で無事送信成功。他のコマンドレットではこんなことしなくて良いのに…
添付ファイルも Attachmentsオプションで簡単につけられるので便利です。
欲を言えば、Cc等のオプションの引数が $null の場合は無視してほしいかなと。現状はキッチリ?エラーを返すのでCC有無で分岐が必要です。
~
~
~
~
~
~
2014-01-10T11:37:59+09:00
1389321479
-
正規表現(PowerShell)
https://w.atwiki.jp/sabakanse/pages/23.html
正規表現はとても便利です。~
PowerShellでも正規表現が使えるので、ここに色々まとめていきます。
*パターンに該当する箇所があるか
ある文字列に、正規表現パターンに該当する箇所があるかを判定します。~
-match演算子を使います。戻り値は True or Falseです。~
> "abcdefg" -match "c.e"
True
*
2014-01-10T10:45:20+09:00
1389318320
-
文字列を1行ずつ処理(PowerShell)
https://w.atwiki.jp/sabakanse/pages/22.html
テキストファイルの内容を1行ずつ処理する場合は、
foreach( $s in Get-Content $filePath ){
…
}
で良いわけです。これはGet-Contentの戻り値がStringのコレクション(1行が1要素になっている)だからです。
が、String変数に全体が入っている場合はそのままforeachできません。なので…
foreach( $s in $text -split "`r`n" ){
…
}
改行文字で split をした結果でまわします。("`r`n"ではなく "`n"かも?)~
簡単。
~
~
~
~
~
~
~
~
~
2013-09-05T16:50:51+09:00
1378367451