自分メモ。
ディスクサイズの使用状態を日時のログで吐き出す。
実際使う時はタスクスケジューラあたりで呼び出す。
Get-PSDrive -Name C | Select-Object @{Name='datetime'; Expression={Get-Date -Format('yyyy/MM/dd')} } , Used, Free | ConvertTo-Csv -NoTypeInformation |Select-Object -Skip 1 |Out-File -FilePath 'Drive_C.txt' -Append
もっと簡単なやり方があったはずだが、「Windows Server 2008R2で動く」という本来あってはならない要件があり、試行錯誤してた結果こんなんを書いていた。
前回から大分間があいた。
更新について
apt update && apt upgrade 的な、プロバイダ経由で入れたパッケージの更新ってどうやるんでしょう?
Update-Package のようなコマンドがあるかと思いきや、見つからなかったのでゴリ押しました。
Get-Package -ProviderName ChocolateyGet
で取得した名前をもとにインストールかけてみました。うーん、これはやり方間違っている感。
あと、これだとインストールの度に「Y」を入力しなければならないです。
諸々、正しいやり方をだれか教えてください。探してもよく分からなかったんです……
それでな?
今更気が付いたんですが……
なぜKBがChoco経由でインストールされている……??
入れた覚えサパリないんですが。
https://chocolatey.org/packages/KB2919442
https://chocolatey.org/packages/KB2919355
たしかに公開されてはいるんですけど、なぜ入っている??
う~ん。分かりませぬ。
PackageManagement は導入部分の記事は多いんですけど、運用している人の記事をあまり見ないんですよね……
運用しなくなってしまったか、秘蔵のタレがあるのか、簡単すぎて記事にしないの3ケース。
……最後のケースのような気がするな……しくしく。
やっぱPowerShell も本を買って調べなおさないとダメですね……むむ。
↓の本はまだ買えていない((+_+))
20. 2月 2017 09:02
/
丘山大一
/
Blog . Power Shell
コメント (0)
電気屋でひっそりと展開されるWindows 10 Moibleコーナーで遊んでいたら、Windows 10 Moible を片手に遊び始める人がもう一人来て、驚きを隠せなかった丘山です。
町中でWindows 10 Moible持っている人、自分以外に初めて見た……
シェア0.5%未満だったと思いますが、つまりは数百人に一人くらいはいる計算なので、探せばそれなりに会えるのでしょうが。
と、それはともかく、久々のPowerShell ネタ。
Windowsログ(イベントビューアーで見れるヤツ)のログ最大値変更
例:イベントビューアー - セキュリティを右クリック - プロパティ - 最大ログサイズ の変更。
(※Powershell を管理者で実行して)
Limit-Eventlog -LogName Security -MaximumSize 20096KB
変更後の確認は、
Get-EventLog -List
から。
今回はこれだけ!
自分メモ。
最近更新していなかったからお茶を濁すための記事です。あと某国大統領選で胃が痛い。PowerShell のバージョン5以降でzipが取り合え使えるようになっていたのかー、不勉強で知らなんだ。
というわけで試す。
①abcというzipファイルが作成され、
②元のファイルは削除される。
というスクリプト。
$FileName = "a.txt"
$ZipFileName = "abc.zip"
try
{
Compress-Archive -Path $FileName -DestinationPath $ZipFileName -ErrorAction Stop
Remove-Item $FileName -ErrorAction Stop
}
catch{
Read-Host "例外!"
}
try、catch でくくって、かつそれぞれのコマンド後に「-ErrorAction Stop」を書いておかないと、Zipファイル作成に失敗した時でも元ファイルが削除されてしまうので注意。
ええ、もちろんやらかしましたとも。
以前、C# のソースは書きましたが、
ちょっと違う画面を、という時に不便なのでPowerShellで書き直してみた。
サクッと画面名で絞り込んで使えるように、というわけで今回はプロセスからWindowTitleだけで絞っています。
$signature = @"
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
"@
$SW_HIDE = 0
$func = Add-Type -MemberDefinition $signature -Namespace "Win32Functions" -name "ShowWindowFunction" -passThru
$Process = Get-Process | Where-Object {$_.MainWindowTitle -match "ほげほげ"}
foreach($p in $Process){
$func::ShowWindow($p.MainWindowHandle, $SW_HIDE)
}
アプリでDBを更新したら、その結果を確認、というのが面倒だったので簡易スクリプトを組む。
初めはSSMSで確認していたが、面倒になってきたので。
とりあえずやってみる。
リトライの「r」が入力されたら再実行。
do{
$Sql = ("select * from TABLE_A;
select * from TABLE_B;")
$DBLst = Invoke-Sqlcmd -Query $Sql -ServerInstance "localhost\名前付きインスタンス" –Username "sa" –Password "パスワード"
$DBLst[0] | Format-Table
$DBLst[1] | Format-Table
$in = Read-Host "再度SQLを投げる場合はrを押下してください。"
} while ($in -eq "r")
結論
本当は関数化するべきですね(ダメじゃん)。
H××年 という形式のフォルダを作りたくなったので、やってみた。
Set-Locatiom ほげほげ
@(1..27) | ForEach-Object{New-Item - Type Directory ("H" +$_.ToString())}
上記でH1 ~ H27 というフォルダができます。
PowerShellスクリプト自体はbatファイル作って-ExecutionPolicyで実行させれば終わり。
ただ、batを管理者権限で実行させると、スクリプト自体がデスクトップに置かれた場合にパスを取得するのが微妙に面倒くさい。
まず起動用のbat自体について。同階層にあるスクリプトを起動する場合。
powershell -ExecutionPolicy RemoteSigned -File %~dp0%スクリプト名.ps1
%~dp0% をつけて、同階層にあるスクリプトのパスを明示して実行するようにする。
PowerShell 処理の中では、実行しているスクリプトの場所は下記でとれる。
$PSScriptRoot
ネットでは $MyInvocation.MyCommand.Path を使う方法をよく見たけど、私の環境では何故か動かなかった。
まあ原因はともかく$PSScriptRootでとる方が短く済んで簡単。