読者です 読者をやめる 読者になる 読者になる

PowerShellがOSSになりLinux/Mac版と出てきたので触ってみた

Mac/LinuxばかりでWindows触らなくなってもう半年になります。やっとBashが手についてきたこのごろですが、昨日こんなニュースを見つけました。 www.itmedia.co.jp Windows使っていた時にはお世話になりっぱなしだったPowerShellがまた使えるかもと思い早速…

PowerShellのWhere-Object句のパフォーマンスが遅いので対応例

PowerShellのパイプラインは手元で使っている分には凄い便利ですが、大量のデータを扱うとしばしばパフォーマンスがとても遅くなる場合があります。PowerShellのWhere-Objectは便利なので使うことが多いと思います。しかし大きな処理をすると問題になること…

12桁のAWSアカウントIDをPowerShellで取得する

取得するためのCmdletが見つからなかったので、やり方を模索してみました。 メタデータのIAM情報から取得してみる。(正規表現) PS>(Invoke-WebRequest "http://169.254.169.254/latest/meta-data/iam/info").Content -match "arn:.*:.*:.*:[0-9]{12}:.*" |…

AWS Tools for PowerShellで別アカウントの処理を実行する(Cross Account)

EC2からAWS Tools for PowerShellを利用する際に、クロスアカウントアクセスロールを利用して別のAWSアカウントの操作をする方法を書いていきます。具体的には、 アカウントAのAWSの情報を、 アカウントBのEC2上で実行するPowerShellから、 AWS Tools for Po…

Proxy経由でAWS Tools for PowerShellを利用する時にひっかかった点

プロキシは正しく設定されていて、EC2にも正しいロールが設定されている。にも関わらず以下のようなメッセージでAWSのコマンドレットが失敗してしまう。認証がうまくいっていないようです。 No credentials specified or obtained from persisted/shell defa…

【PowerShell】クラス名わからないけどWMIを使ってOS情報を取得したい

WMIを使ってOSの情報をコマンドで取得するのに便利なGet-WmiObjectですが、肝心のWMIクラス名がわからない場合の手っ取り早い方法です。 PowerShellコンソール開いて以下をコピペで実行します。 PS> gwmi -List | Out-GridView -PassThru | %{gwmi -Class $_…

インストール済みのフォントを見やすく一覧するPowerShellスクリプト(日本語対応版)

フォントを選ぶときに簡単に一覧を出したいと思い調べてみたら、インストール済みのフォントの一覧をIEブラウザに一覧してくれる大変便利なスクリプトが見つかりました。 https://technet.microsoft.com/en-us/library/ff730944.aspx ただ、これだと日本語特…

C#クラスライブラリ(DLL)をAzure Automationで利用する方法

Azure上からIT管理の自動化ができるAzure Automationですが、Igniteやde:codeを見ていても、Microsoftの自動化ツールの中心になっていくのではと思っています。【SCO・SMA・Azure Automation】Microsoft自動化ツールを整理してみたsolution.realtech.jp Azur…

Azure Billing API(課金API)をPowerShellから試してみた

Azureの課金情報取得のAPIが遂に出ました。ScottGu's Blog - New Azure Billing APIs Availableweblogs.asp.net 早速、こちらの記事で認証方法などを参考に、課金レートのAPIも組み合わせて作ってみました。Export Azure Subscription Usage to CSV with NEW…

ドメイン名、ユーザ名と関連するSIDを相互変換するPowerShellスクリプト

Windowsのドメイン名やユーザ名とSIDを相互変換するPowerShellスクリプトを作ってみました。エラーハンドリング無しです。 function Convert-UserAndSid { [CmdletBinding()] [OutputType([String])] Param ( # パラメーター 1 のヘルプの説明 [Parameter(Ma…

PowerShellコンソールを拡張できるPSReadLineが良さそう

Hey, Scripting Guy!の以下の記事にPowerShell Consoleが拡張できるPSReadLineについて書いてあって、一目見て便利そうなので設定してみました。The Search for a Better PowerShell Console Experience - Hey, Scripting Guy! Blog - Site Home - TechNet B…

PowerShellでファイルやフォルダのアクセス権を設定する

PowerShellでWindowsファイル・フォルダのアクセス権を設定する方法です。 #ファイルやディレクトリ名 $path = "C:\TEMP" #ユーザ名やグループ名(ドメイン名またはコンピュータ名から指定) $userGroup = "MYPC\MyUser" $acl = Get-Acl $path $permission =…

Administrators以外のユーザでPSSessionによるリモート制御をする

リモートのコンピュータを制御できるPSSessionはとても便利です。ただデフォルトではAdministratorsグループのユーザしかPSSessionを張ることはできません。Administratorsグループ以外のユーザでPSSessionが可能になる設定を書きます。 一番簡単な方法 Remo…

PowerShellでHashTableを配列みたいにForeachやWhereする

PowerShellのHashTableの場合、そのままだとパイプラインでForeachやWhere句を通しても意図した通りの処理ができません。 PS>$hashTable = @{a=1;b=2} PS>$hashTable | ForEach-Object{$_.Name + ":" + $_.Value} : GetEnumeratorで列挙用オブジェクトを取り…

PowerShellでOSリソース情報(CPU、Memory、Disk)を取得する

PowerShellでCPUやメモリ、ディスク使用率などのOSリソースに対する情報を取得する方法を書きます。パフォーマンス情報を取得する色々方法はありますが、パフォーマンス モニター (PerfMon) で取得しているシステムも多いと思います。今回はこれをPowerShell…

PowerShell ISEにアドオンを追加して機能拡張する

PowerShellの開発ツールとして有名どころで以下のようなものがあります。 PowerShell ISE Windows標準です。 Visual Studio(Link) こちらのブログに詳しく書かれています。 PowerShell Script の エディタ と Visual Studio - tech.guitarrapc.cóm PowerGui…

PowerShellのInvoke-WebRequestでCookieを取得して使う

例えばGoogleからのCookieを取得してみます。SessionVariableの引数がポイントです。 $uri = "http://www.google.co.jp/" Invoke-WebRequest -Uri $uri -SessionVariable mySession これで変数$mySessionにセッション情報が格納されます。 PS> $mySession | …

Azure File StorageのSMB共有のスピードをPowerShell使って測ってみた

プレビュー機能のAzure File Storageを、Azure上のWindows仮想マシンからネットワークドライブとしてマウントして、コピーや移動のスピードを測ってみました。 準備 Azure Storage Accountを2つ用意しました。ネットワークドライブとしてマウントするためにS…

New RelicのREST APIをPowerShellから使ってみる

手元のWindowsからNew RelicのREST APIを試してみたかったので、PowerShellからアクセスしてみました。 どんなデータが取れるか 実際にどんな機能があるか知りたい場合は、New RelicでAPI Explorerが準備されているので、実際に動かしながらコードを組むこと…

PowerShellでAzure テーブル ストレージ を操作する(Insert,Query etc)

C#からAzureテーブルストレージを操作する方法はこちらに書いてあったので、これを参考にPowerShellで置き換えてみました。http://azure.microsoft.com/ja-jp/documentation/articles/storage-dotnet-how-to-use-tables/ ストレージアカウントへの接続コンテ…

Azure管理証明書(PFXファイル)を利用してPowerShellからAzureを管理する

PFXファイルを利用して、PowerShellからAzureを管理する方法を書きます。 PFXファイルの作成 まず、事前にWindows SDKをインストールしておく必要があります。 http://msdn.microsoft.com/ja-jp/windows/desktop/bg162891.aspx 手元の環境だとデフォルトで以…

世代管理機能付きAzure BLOB Snapshot取得PowerShellスクリプト

前にこちらの記事でAzureのBLOBのSnapshotに関して書きました。【Azure】PowerShellでBLOB上のVHDのSnapshot作成・取得・削除の操作をする - YOMON8.NET 【Azure】PowerShellでBLOB上のVHDのSnapshot作成・取得・削除の操作をする - YOMON8.NET 上記の内容を…

Windowsローカルユーザーのパスワード有効期限確認用PowerShellスクリプト

Windowsのローカルユーザアカウント毎のパスワードの有効期限情報とロックの状態を取得して一覧出力します。ADからユーザ情報を取得する場合はAD用のコマンドレットや、LDAPプロバイダーを利用しますが、今回はWindowsローカルからの情報取得なのでWINNTプロ…

System Center OrchestratorからPowerShellでAzure管理コマンドを実行する

PowerShellのAzure管理用モジュールを実行するにはPowerShell3.0以上が必要になります。最新のOSで作業していると気づかない人もいるかもしれませんが、むりやりVersion 2のPowerShellで実行してみるとエラーメッセージにしっかり書かれています。 requires …

Azure上に複数仮想マシンを展開してドメイン参加させるPowerShellスクリプト

検証で何台も新規のサーバを構築して削除してを繰り返す必要があったので、Azure上に複数のVMを一気に展開してAD(ドメイン)参加させるスクリプト作りました。 仕様 Windows 2008R2をAzureのデフォルトイメージから該当のネットワーク内に展開。展開後にWin…

Windows Update?Microsoft Update?利用可能な更新サービス一覧方法

Windowsの更新サービスにはWindows UpdateやMicrosoft Updateなど複数種類があります。 Windows Update と Microsoft Update ってどう違うの? 環境によって使えるサービスが違うのですが、以下のPowerShellで一覧可能です。 (New-Object -ComObject "Microso…

PowerShellのSplitで複数の変数を同時に設定

PowerShellで配列を生成した時に格納先の変数を複数設定できるんですね。例えば、こんな感じで$weekから$daysの配列を作ると、 $daysbは全ての曜日が格納された配列になります。 $week = "Sun,Mon,Tue,Wed,Thu,Fri,Sat" $days = $week -split "," 曜日の要…

最新OS上で古いバージョンのPowerShellを実行する

操作しているOSに入っているPowerShellとは別バージョンのPowerShellを実行したい場合の手順です。サーバで動くPowerShellをクライアントPCで開発することは良くあると思います。その際にサーバー側とクライアント側のPowerShellのバージョンが同じならば良…

PowerShellでStringからScriptBlockオブジェクトを生成(変換)する

題名の通りなのですが、どのような場面で利用するかというのと一緒に書きます。Invoke-CommandでリモートセッションにScriptBlock型の変数をArgumentListとして渡そうとすると、途中でObjectに変換されてしまいます。 事象 まず、通常通りScriptBlockの変数…

PowerShellコードを自動インデント・整形するスクリプト

PowerShellのインデントが崩れてしまうことがあります。自動インデントをできるツールを探していたのですが、基になるスクリプト見つけたので、結局それを元に自分で関数作りました。(本当は標準のISEとかで実装されていると嬉しいのですが。。。)作ってみ…

PowerShellでDelegateに近いことことしてみた(並列実行など)

PowerShellでDelegate使いたいと思って動かしていたのですが、結局ScriptBlockが一番近いのかなと思いメモです。 #ScriptBlockを変数に割り当てます PS>$d = {param($p) return $p * 2} PS>$d.gettype() IsPublic IsSerial Name BaseType -------- -------- …

PowerShellで文字列などの変数のNullまたは空文字を確認するには

まず、.Net的にStringのIsNullOrEmptyを使う方法があります。 PS > $foo = "bar" PS > [String]::IsNullOrEmpty($foo) False PowerShellでは変数をboolにキャストするだけでも同じことができます。 $stringNull = $null $stringEmpty = "" $stringNotEmpty =…

PowerShellで現在のユーザやグループなどのID情報を取得する方法

PowerShellでIdentity関連情報を取得する方法です。 ユーザ情報を取得する まず、ユーザ情報のオブジェクトを取得します。 [System.Security.Principal.WindowsIdentity]::GetCurrent() WindowsIdentityオブジェクトが返ってきます。 WindowsIdentity クラス…

PowerShellが64bitプロセスと32bitプロセスどちらで動いているか確認する方法

時々裏でPowerShellが実行されている場合、64bitだと思ったら32bitで動いていたということがあるので。判別には以下のコマンドを使います。 [System.Environment]::Is64BitProcess 64bitの場合 powershell.exeの場所 C:\Windows\System32\WindowsPowerShell\…

インストール済みのWindows Serverの役割と機能を一覧するPowerShellコマンド

インストール済みのWindows Severの役割と機能はGet-WindowsFeatureで簡単に一覧できます。いくつかバリエーションを書いてみます。 以下のコマンドではInstalled(インストール済み)の役割と機能を一覧しています。 PS> Get-WindowsFeature | ?{$_.InstallS…

Azure PowerShell Toolsの更新(アップデート)方法

Azure関連のブログなどを読んでいると、結構頻繁にAzure管理用のPowerShellモジュールである、Azure PowerShell Toolsの新バージョンがリリースされましたという情報が見つかります。 Azure PowerShell Toolsの最新版をダウンロードするには、Azureの公式サ…

PowerShellからlog4netでロガー作って使ってみた

PowerShellのロガーについて、Out-Fileとかを使った自作ロガー作っていたりしたのですが、他に方法無いか探してみました。そこでPowerShellからNlog使えるという以下の記事を見つけて、log4netも試してみました。 PowerShellとNLog | 84zume Works 必要なフ…

PowerShellでコンピュータ内の証明書を一覧したりアクセスするには

PowerShellではディレクトリだけでなく、証明書ストアの中をファイルディレクトリのように移動できます。 #現在のユーザの証明書ストアに移動 PS C:\> cd Cert:\CurrentUser #プロンプトの先頭がCertになります PS Cert:\CurrentUser> #個人(My)に移動します…

PowerShellでFQDNを取得する方法色々

PowerShellで自コンピュータのFQDNを取得する方法を色々と。 単純に環境変数を組み合わせる これが一番シンプルですが全部大文字になってしまいます。 "$env:COMPUTERNAME.$env:USERDNSDOMAIN" WMIを利用する $info = Get-WmiObject Win32_ComputerSystem "{…

進化を続けるPowerShell DSCで利用できるリソースを確認する方法

こちらの記事でDSCでAzure上の仮想マシンの自動構築のやり方を書きました。しかし、DSCさえあれば100%何でもできると言う訳ではありません。DSCで何かできるのかはDSCのリソースというもので表現されています。デフォルトではこちらの12種類のリソースがDSC…

Azure PowerShellでデフォルトのサブスクリプションを指定する

PowerShellでAzureを操作する時に、複数のサブスクリプションを管理している場合、 最初にどのサブスクリプションを操作するか指定する必要があります。その際に使うのがSelect-AzureSubscriptionコマンドです。まず、自分のアカウントに紐づいているサブス…

PowerShell DSCを利用したAzure仮想マシン構築の自動化

PowerShellのDSC(Desired State Configuration)はWindows Management Framework 4.0から導入されたMicrosoftのテクノロジで、ChefやPuppetのようなものですが、知らない人はこちらのページがわかりやすかったです。 PowerShell DSCで導入された新しい構文キ…

PowerShellの書き方とパフォーマンスについて、パイプラインと構造化どちらが良いの?

自分の場合は、PowerShellを大きなデータ処理などに使ったことが無いため、実は意識したことは少ないのですが、少しの書き方の違いでPowerShellのパフォーマンスは大きく変わるようです。内容はこちらの動画を参考にして書いています。 Windows PowerShell B…

PowerShellでキーボードのキー入力を取得する

PowerShellではキーボードのキー入力を以下の書き方で取得できるようです。 [Console]::ReadKey($true) これをPowerShellコンソールから実行してみると動きがわかりやすいです。 #Ctrl+C+Enterで抜けます while($true){[Console]::ReadKey($true)} 取得でき…

【PowerShell】New-AzureVMでAzure仮想マシンの作成サンプル

仮想マシンの作成には色々なパターンがあると思いますが、一つの例としてサンプルスクリプトを載せておきます。 サンプルで作る仮想マシン 今回作るマシンには以下のような設定を含んでいます。 PowerShellのリモート実行用のエンドポイントを解放 タイムゾ…

Azure BLOBコピー処理のPowerShellスクリプト

前にもこちらの記事でAzureのBLOBのコピースクリプトを載せましたが、 PowerShellでAzureストレージアカウント間のBLOBをコピーする - YOMON8.NET.Netのクラスを多用していて読みにくかったので、PowerShellのコマンドレットを利用する形で書き換えてみまし…

Azure BlobオブジェクトをPowerShellでダウンロード

BLOBに置いたデータをPowerShellを使ってローカルにダウンロードしてくるスクリプトです。 Import-Module Azure #パラメータ設定 $StorageAccountName = "ストレージアカウント名" $AccountKey = "ストレージアカウントキー" $containerName = "コンテナ名" …

Azure環境の仮想マシンやディスクなどを一括削除

新しいサブスクリプションに引越したため、古いサブスクリプション側に残っていた仮想マシンやディスクなどを一括削除する必要がありました。 最初はAzure Portalから一つづつ削除していたのですが、このやり方だと凄い時間がかかります。そこでPowerShellで…

PowerShellで特定の名前のプロセスの数を取得する

PowerShellでWindowsのプロセス数を取得する方法です。 Get-Processで取れば良いのですが、該当プロセスが0件の時にエラーになってしまうので、以下のように書いてみました。 #svchostプロセス数を取得 (Get-Process -ErrorAction 0 "svchost").Count #ファ…

PowerShell Windows形式⇔UNIX形式でのテキスト出力(改行コード調整)

PowerShellを使ってのWindows 形式の改行コード (CRLF) とUNIX形式の改行コード (LF) の相互変換の方法です。 Windows形式→UNIX形式 [string]::Join("`n",(Get-Content .\winText.txt)) | Set-Content .\unixText.txt UNIX形式→Windows形式 [string]::Join("…