決済つきの予約システムが3,940円〜/月

SHIMSOFT-Modules Support? Site

あまり期待してはいけない
気の向くままに

SHIMSOFT-Modules って?

SHIMSOFT が PowerShell Gallery にアップロードした PowerShell Module の総称です。
PowerShell を起動し、以下コマンドで探してください。

ざっくり
Find-Module -Name SHIMSOFT*

やや厳密
Find-Module -Name SHIMSOFT* | Where-Object {$_.Author -eq "SHIMSOFT"}

いずれも役に立つか、役に立たないかはご利用者の気分次第です。
ご利用された環境によって、思わぬ挙動をし何らかの損害が出たとしてもこちらでは一切保証いたしません。
自己責任の上、面白半分でお試しください。


モジュールのインストール方法などは PowerShellGet のお作法に準拠してます(たぶん

現在の PowerShell 環境でインストール済みで利用可能なモジュール群を確認する場合
Get-Module -ListAvailable

特定のモジュール名が判明している場合
Get-Module -ListAvailable モジュール名

PC / Sever 環境にインストールする場合は 管理者モードで PowerShell を起動してください。
Install-Module -Name モジュール名
のようにインストールします。

アンインストールする場合は
Uninstall-Module -Name モジュール名

以下は管理者権限で開かなくてもできる見込みです。
インストールせず、任意のフォルダーに保存する場合
Save-Module -Name モジュール名 -Path C:\Work\SavedModules\

インストールしたモジュールを利用するとき
Import-Module -Name モジュール名

保存したモジュールを利用するとき
Import-Module -Name C:\Wok\SavedModules\モジュール名\バージョン番号\モジュール名.psd1

※ Import-Module を行った PowerShell セッション内でのみ有効です。別の PowerShell を起動したり、
 モジュールを読み込んだ PowerShell を終了(閉じる)た場合、
 次回以降も Import-Module を行う必要があります。

現在読み込んであるモジュールを確認する場合
Get-Module

読み込んだモジュールが邪魔になったとき
Remove-Module -Name モジュール名

インストール済みモジュールを最新バージョンに更新する。
Update-Module -Name モジュール名 -Force
※ モジュール名を指定しない場合、インストール済みのすべてのモジュールに着いて更新が確認されます。


読み込んだモジュールに含まれるコマンド一覧を確認する
Get-Command -Module モジュール名

コマンドの使い方を確認する
Get-Help コマンド名 -Full


目次

SHIMSOFT-Fundamentals (version 1.7)

含まれるコマンド
Compare-ObjectProperties
ConvertTo-Narrow
ConvertTo-Wide
Format-WindowsFeature
Get-MSProductLifeCycle
Get-PropertyNames
Test-IsNumeric


ConvertTo-Narrow [-String] <String> [<CommonParameters>]
全角文字を半角文字に変換します。あえて VBライブラリを使っていないので、PowerShell on Linux でも動きます多分。VBライブラリ使うと PowerShell on Linux では使えなくなります。

    -------------------------- 例 1 --------------------------
    PS C:\>ConvertTo-Narrow -String "あいうえお"

    -------------------------- 例 2 --------------------------
    PS C:\>ConvertTo-Narrow -String "12345"


ConvertTo-Wide [-String] <String> [<CommonParameters>]
半角文字を全角文字に変換します。あえて VBライブラリを使っていないので、PowerShell on Linux でも動きます多分。VBライブラリ使うと PowerShell on Linux では使えなくなります。

    -------------------------- 例 1 --------------------------
    PS C:\>ConverTo-Wide -String "アイウエオ"

    -------------------------- 例 2 --------------------------
    PS C:\>ConvertTo-Wide -String "12345"


Get-MSProductLifeCycle [-Product] <String> [<CommonParameters>]
マイクロソフト社製品の製品名からライフサイクル情報を確認します。
以下の URL から Excel ファイルをダウンロードしてキャッシュします。
https://app-omaha-prod.azurewebsites.net/api/PublishedListings/Export
インターネットに接続できない環境の場合は利用できません。

・・・誰だね? Excel ファイル直接開いた方が速いとか言い出したのはw


    -------------------------- 例 1 --------------------------

    PS C:\>Windows Server 2016 について確認したい場合。

    Get-MSProductLifeCycle -Product "Windows Server 2016"


    -------------------------- 例 2 --------------------------

    PS C:\>Microsoft Product Life Cycle リストを強制的にリフレッシュしたい場合。

    Get-MSProductLifeCycle -Refresh


    -------------------------- 例 3 --------------------------

    PS C:\>2022年中にメインストリームサポートが終了する製品を確認したい。

    Get-MSProductLifeCycle -Product * | where {$_.MainstreamDate -ge "2022/01/01" -and $_.MainstreamDate -le "2022/12/31"}


    -------------------------- 例 4 --------------------------

    PS C:\>2022年中に延長サポートが終了する製品を確認したい。

    Get-MSProductLifeCycle -Product * | where {$_.ExtendedEndDateDate -ge "2022/01/01" -and $_.ExtendedEndDate -le "2022/12/31"}


    -------------------------- 例 5 --------------------------

    PS C:\>2022年中にモダンサイクルポリシー製品の提供が終了する製品を確認したい。

    Get-MSProductLifeCycle -Product * | where {$_.RetirementDate -ge "2022/01/01" -and $_.RetirementDate -le "2022/12/31"}



Get-PropertyNames [[-Array] <Array>] [<CommonParameters>]
オブジェクト配列からプロパティ名を取得します。
構成要素の異なるオブジェクトの配列から、すべてのプロパティ名を取得します。

  -------------------------- 例 1 --------------------------
  PS C:\>$Array | ft -Property (Get-PropertyName -Array $Array)

これ、わかる人にはわかると思うのですが、
$a = get-hogehoge
的なのコマンドで何らかの情報を取得した場合で、結果の $a はオブジェクト配列なんだけれども、
$a[0] が持っているプロパティと、$a[1] 以降が持っているプロパティが異なる場合
Format-Table コマンドがプロパティ名指定なしの時、$a[0] に含まれるプロパティティ名が基準になるので
必要な列が出なかったりするんです。

Get-PropertyName は全配列要素のプロパティ名を列挙して含まれるプロパティ名すべてを返します。
※ 階層には対応していません。
  $a[1].Prop1  の Prop1 は返しますが、 $a[1].Prop1.Name、 $a[1].Prop1.Value のような
  Prop1 配下のプロパティ名が存在する場合、それらは拾いません。
  拾えたらいいなーと思いつつも、
  $a | ft -Property Prop1.Name, Prop1.Value
   は動かないので。

Test-IsNumeric [-String] <String> [<CommonParameters>]
指定した文字列が数値文字列かどうかを確認します。

    -------------------------- 例 1 --------------------------
    PS C:\>Test-IsNumeric -String "100"
    結果は $True

    -------------------------- 例 2 --------------------------
    PS C:\>Test-IsNumeric -String "123.4"
    結果は $True

    -------------------------- 例 3 --------------------------
    PS C:\>Test-IsNumeric -String "1,234"
    結果は $True

    -------------------------- 例 4 --------------------------
    PS C:\>Test-IsNumeric -String "123"
    結果は $False
    全角文字列は数値文字列とはみなされません。

    -------------------------- 例 5 --------------------------
    PS C:\>Test-IsNumeric -String "123abc"
    結果は $False

    -------------------------- 例 6 --------------------------
    PS C:\>Test-IsNumeric -String "百十五"
    結果は $False

Compare-ObjectProperties [-ReferenceObject] <Object> [-DifferenceObject] <Object> [[-Deep] <Boolean>] [[-IgnoreProperties] <Array>] [[-Depth] <Int32>] [[-Prefix] <String>] [[-IgnoreArrayNoDiffs]]

    オブジェクトの一致性を確認します。
    戻り値として不一致のプロパティ一覧を返します。
  Compare-Object の結果に納得いかない人向けw
    戻り値が Null の場合、比較対象のオブジェクトは一致している可能性が濃厚です。

    一致する項目は返されません。

    戻り値に含まれる項目は以下の通りです。

    PropertyName : 比較対象オブジェクトに含まれるプロパティの名前です。
    RefValue     : 参照側の値
    RefExist     : 参照側にプロパティが存在していたかどうか
    RefIsNull    : 参照側が Null だったかどうか
    DiffValue    : 比較側の値
    DiffExist    : 比較側にプロパティが存在していたかどうか
    DiffIsNull   : 比較側が Null だったかどうか
    DiffType     : 差異種別

    オプションフィールド
    SubDiff      : Deep 比較動作時に比較結果情報が含まれる。
    DiffArray    : プロパティタイプが ArrayList の時に比較参考値が含まれる。

    DiffType の種類
    <>   : 両方に値が含まれ、相違している
    <=>   : 両方に値が含まれ、相違している。そのプロパティ値以下の属性は一致していた。
    <=   : 参照側にのみ値が含まれている
    =>   : 比較側にのみ値が含まれている
    =//= : プロパティが ArrayList であり、アイテム数が同値であり、判定できない。

   -------------------------- 例 1 --------------------------

    PS C:\>Compare-ObjectProperties -ReferenceObject $RefObj -DifferenceObject $DiffObj


    -------------------------- 例 2 --------------------------

    PS C:\>$Diff = Compare-ObjectProperties -ReferenceObject $RefObj -DifferenceObject $DiffObj

    if ($null -eq $Diff) { "一致" } else { "相違" }


    -------------------------- 例 3 --------------------------

    PS C:\>比較除外したいプロパティ名がる場合、IgnoteProperties オプションを指定します。

    Compare-ObjectProperties -ReferenceObject $RefObj -DifferenceObject $DiffObj -IgnoreProperties LastAccessTime,LastAccessTimeUtc

    あるオブジェクトで最終アクセス時間が異なることが予想されるが無視したい場合、IgnoreProperties オプションに指定すると比較除外されます。
    無視したいプロパティ名が多数ある場合、配列変数に入れて渡すことが可能です。

    $IgnoreProperties = @("LastAccessTime","LastAccessTimeUtc")
    Compare-ObjectProperties -ReferenceObject $RefObj -DifferenceObject $DiffObj -IgnoreProperties $IgnoreProperties




    -------------------------- 例 4 --------------------------

    PS C:\>通常の比較で確認したい差異情報に辿り着かない場合、Deep オプションや Depth オプションを試みることができます。

    オブジェクトのプロパティが階層的に情報を持つ場合、規定値で Depth 3 階層まで掘り下げて確認されます。
    Depth 指定値を大きくすることでより深い階層の値を確認できる可能性があります。
    処理時間がより多くかかります。

    Compare-ObjectProperties -ReferenceObject $RefObj -DifferenceObject $DiffObj -Depth 4

    通常比較で一致とされている部分でも Depp モードで比較することにより差異を見つけられる可能性があります。
    処理時間がより多くかかります。

    Compare-ObjectProperties -ReferenceObject $RefObj -DifferenceObject $DiffObj -Deep:$true



    -------------------------- 例 5 --------------------------

    PS C:\>プロパティのタイプが ArrayList の場合で、要素数が一致している場合同値と判断され (DiffType = =//=) た場合、

    本当に一致していて確認不要の場合が多い見込みなので結果リストには含まれない様省略されます。
    しかしながら、状況によりこのステータスの情報を確認したい場合があります。
    その場合、IgnoreArrayNoDiffs オプションを $false に指定します。

    Compare-ObjectProperties -ReferenceObject $RefObj -DifferenceObject $DiffObj -IgnoreArrayNoDiffs:$false



    -------------------------- 例 6 --------------------------

    PS C:\>Exchange Online 上で User1 と User2 メールボックスの設定値の差異を確認したい場合

    あらかじめ Exchange Online に接続してあることを前提とした例を示します。

    $RefMailbox = Get-Mailbox -Identity User1
    $DiffMailbox = Get-Mailbox -Identity User2

    Compare-ObjectProperties -ReferenceObject $RefMailbox -DifferenceObject $DiffMailbox




Format-WindowsFeature [-WindowsFeature] <Array> [<CommonParameters>]


    Get-WindowsFeature コマンドを実行した結果を保存しておきたいときに、
    Get-WindowsFeature | Export-Clixml -Path WindowsFeature.xml
    として情報を保存したとします。

    保存したファイルなどを別の環境で確認したい場合に、以下のようにしたとします。

    $WF = Import-Clixml -Path WindowsFeature.xml
    $FW

    すると Get-WindowsFeature を実行したときのような結果が出ずにがっかりするんです。
    そこで、 Format-WindowsFeature でもう一度あの表示を得ることができます。

 -------------------------- 例 1 --------------------------

    PS C:\>Format-WindowsFeature -WindowsFeature (Import-Clixml -Path WindowsFeature.xml)


SHIMSOFT-Holidays (version 2.2)

とある製品のスケジュールジョブ設定の柔軟性があるようなないような状況に見舞われ、
準備されているスケジュールパターンを選ぶか、そうでなければ指定日を CSV で列挙してインポートするしかないという状況に見舞われました。
その時はたまたま日曜日を列挙したいだけだったので、 Excel あったら ビョっと引っ張るだけなんですが
サーバー OS に Excel なんて入ってないわけで PowerShellで小細工しました。

その時、変なスイッチが入って「これ、水曜日がー!とか、毎週じゃないんよ、隔週!隔週!とか、え?祝日は?とかこの日会社記念日で休み~!」とか言われるときがどこかで訪れるんじゃないかと思って
いろいろ列挙するようにしてみたというもの。

しかしよく考えらら そんなに融通の利かないスケジュールジョブシステムあまりないかもしれんなぁと思って
誰得ツールと化した可能性。

このモジュールはインストールパスにテンプレート情報 HolidaysTemplate.xml などを保存する必要があります。
Install-Module -Name SHIMSOFT-Holidays
でインストールした場合、インストールフォルダーに利用ユーザーの書き込みアクセス許可を付与してください。

もし現在ログインしているユーザーだけが利用できればいい場合、
Install-Module -Name SHIMSOFT-Holidays -Scope CurrentUser
でインストールすると他のユーザーでログインした場合には利用できませんが、
自分自身には書き込み権限を持つフォルダーにインストールされますのでそのまま利用できます。


大事なことですが、2020年東京オリンピックに向けた祝日大移動謎法案には対応できないですよ、えぇ。
なにあれひどいw

Version 2.0 で 2020年東京オリンピック開催に伴う祝日移動に対応しました。
テンプレートに StartDate、EndDate 要素を追加し、テンプレートが有効な期間を指定できるように改善。
これにより、2020年限定の祝日テンプレートを追加。
「体育の日」が「スポーツの日」に改名されることにも対応。

Version 2.1 で 元号「令和」に対応しました。


含まれるコマンド
Add-CustomHoliday
Get-Holidays
Get-HolidaysTemplate
Get-NextWeekDay
New-CustomHoliday
Remove-CustomHoliday
Reset-HolidaysTemplate
Update-HolidaysTemplate


Add-CustomHoliday [-Name] <String> [[-Date] <String>] [[-Expression] <String>] [[-SubstituteEnable]] [[-Type] <String>] [[-Locale] <String>] [[-StartDate] <String>] [[-EndDtae] <String>] [<CommonParameters>]

祝日/休日定義を作成し、カスタムテンプレートに追加します。
以下に相当する一連の動きを行います。
$CHT = Get-HolidaysTemplate -TemplateType Custom
$CHT += New-CustomHoliday -Name "メーデー" -Expression 'Get-Date -Date ($Year + "/5/01")'
Update-HolidaysTemplate -CustomTemplate $CHT -TemplateType Custom -EndDate "3000/12/31"


   -------------------------- 例 1 --------------------------
   PS C:\>Add-CustomHoliday -Name "メーデー" -Date "5/1"


Get-Holidays [[-Year] <String>] [[-IncludeCustom]] [[-OnlyCustom]] [<CommonParameters>]
 祝日テンプレートから指定年の祝日一覧を算出します。
 祝日日程が 日曜日 である場合、振り替え休日も算出され ActualDate に出力されます。
 Date = 祝日の日
 ActualDate = 祝日の日、または振り替え休日

   -------------------------- 例 1 --------------------------
   PS C:\>Get-Holidays

   -------------------------- 例 2 --------------------------
   PS C:\>Get-Holidays -Year "2018"

   -------------------------- 例 3 --------------------------
   PS C:\>Get-Holidays -Year "2018" -IncludeCustom

   -------------------------- 例 4 --------------------------
   PS C:\>Get-Holidays -Year "2018" -OnlyCustom


Get-HolidaysTemplate [[-TemplateType] <String>] [<CommonParameters>]
 現在保存済みの祝日/休日定義を参照します。
 カスタムな祝日/休日定義を変更する場合に利用します。
 -Default オプションを使うとデフォルトテンプレートを参照できます。

 -------------------------- 例 1 --------------------------
 PS C:\>Get-HolidaysTemplate

 -------------------------- 例 2 --------------------------
 PS C:\>Get-HolidaysTemplate -TemplateType PublicHolidays


Get-NextWeekDay [[-From] <String>] [[-To] <String>] [[-NextWeekDay] <String>]
[[-BeforeWeekDay] <String>] [[-IntervalWeeks] <Int32>] [[-ListCount] <Int32>]
[[-AllowSameDate]] [[-DateTime]] [<CommonParameters>]

指定日を基準に次ぎの指定曜日を算出します。
   -------------------------- 例 1 --------------------------
   PS C:\>Get-NextWeekDay -From (Get-Date -Format "yyyy/MM/dd") -NextWeekDay Monday
 今日から次の月曜日

   -------------------------- 例 2 --------------------------
   PS C:\>Get-NextWeekDay -From "2018/2/17" -BeforeWeekDay Monday
 "2018/2/17" から前の月曜日

   -------------------------- 例 3 --------------------------
   PS C:\>Get-NextWeekDay -From "2018/2/17" -NextWeekDay Monday -IntervalWeeks 2
 "2018/2/17" から2週間後のの月曜日

   -------------------------- 例 4 --------------------------
   PS C:\>Get-NextWeekDay -From "2018/2/17" -NextWeekDay Monday -ListCount 10
 "2018/2/17" 以降の月曜日を 10個分列挙

   -------------------------- 例 5 --------------------------
   PS C:\>Get-NextWeekDay -From "2018/2/17" -NextWeekDay Saturday -AllowSameDate
 "2018/2/17" 次の土曜日 指定日が土曜日の場合は指定日も含む

   -------------------------- 例 6 --------------------------
   PS C:\>Get-NextWeekDay -From "2018/2/17" -NextWeekDay Saturday -AllowSameDate -DateTime
 "2018/2/17" 次の土曜日 指定日が土曜日の場合は指定日も含む 戻り値は DateTime 型


 
 New-CustomHoliday [-Name] <String> [[-Date] <String>] [[-Expression] <String>]
 [[-SubstituteEnable]] [[-Type] <Stri ng>] [[-Locale] <String>] [[-StartDate] <String>] [[-EndDate] <String>] [<CommonParameters>]

祝日/休日定義を作成します。
祝日/休日定義の配列を構成し、Update-HolidaysTemplate のパラメータとしてカスタムな祝日定義テンプレートとして保存することが出来ます。

 -------------------------- 例 1 --------------------------
 PS C:\>$CHT = Get-HolidaysTemplate
 $CHT += New-CustomHoliday -Name "メーデー" -Date "5/1"
 Update-HolidaysTemplate -CustomTemplate $CHT


Remove-CustomHoliday [[-Name] <String>] [[-ID] <String>] [<CommonParameters>]
指定された定義を、カスタムテンプレートから削除します。

    -------------------------- 例 1 --------------------------
    PS C:\>Remove-CustomHoliday -Name "メーデー"


Reset-HolidaysTemplate [[-Default]] [[-PublicHoliday]] [[-Custom]] [<CommonParameters>]
 祝日テンプレートを Default に初期化します。
 祝日テンプレートに追加設定していた情報は失われます。

 -Default オプションを指定し、ハードコードされている祝日テンプレートに初期化する場合、
 2018 年 9月現在制定されている祝日情報に対応します。対応している祝日は以下の通りです。
 元日
 成人の日
 建国記念の日
 春分の日
 昭和の日
 憲法記念日
 みどりの日
 こどもの日
 海の日
 山の日
 敬老の日
 秋分の日
 体育の日 / スポーツの日 (2020年以降)
 文化の日
 勤労感謝の日
 天皇誕生日 (昭和 / 平成 / 新元号)

Update-HolidaysTemplate [-CustomTemplate] <Array> [[-TemplateType] <String>] [<CommonParameters>]

 現在保存済みの祝日/休日定義を更新します。
 カスタムな祝日/休日定義を変更する場合に利用します。
 -TemplateType "Custom" が既定の動作です。
 新設された祝日の追加や、廃止された祝日の削除を反映したい場合は "PublicHolidays" を指定してください。
 "Default" を指定することでデフォルトテンプレートを更新することが出来ます。
 Reset-HolidaysTemplate では、"Default" テンプレートで "PublicHolidays" を上書きしてリセットします。
 Reset-HolidaysTemplate -Default では、"Default" テンプレートを破棄して初期値を再生成し、 "PublicHolidays" を上書き
 します。

 Get-Holidays では "PublicHolidays" テンプレートを使用します。
 Get-Holidays -IncludeCustom では "PublicHolidays" と "Custom" テンプレートの複合結果が得られます。


SHIMSOFT-NetProcess (version 1.3)

足の甲を骨折してみたり、世間的に新型コロナウイルス (COVID-19) 感染症対策とか不要不急の外出を避ける雰囲気だったりもして、比較的家にこもっているからちょっと思い付きで作りました。

かしこい人はうまくやるんでしょうけども。
Windows Server とかになんかソフトウェアを入れようとしたとき、
そのソフトウェアが何らかの通信ポートをリッスンするとき、既にインストール済みの何かがそのポートにバインド済みでインストールできない! とか発生した場合。

netstat -a とかで 確かに何かがポートリッスンしているのは分かった。
・・・
netstat -b とかやって何がポートを握っているのか見ようとしたら管理者権限必要でできなかったりとか。
管理者権限を運よく使えるようになった場合であっても、表示されるのは「HostedAgent.exe」みたいな実行ファイルだけだったりして、これどこの誰やねんてのは追加調査が必要だったりするわけです。

これはつまるところこの邪魔になっているやつを止めたいけど突き止めるまでが大変なわけです。

こんな時、PowerShell なら一発解決してくれるんじゃないかね?! と期待するじゃないですか。

netstat コマンドに代わるものは NetTCPIP モジュールに含まれる、
Get-NetTCPConnection
Get-NetTCPEndpoint
かなぁ、と思うのだけれども。この人たちはプロセス名とか表示されないわけですよ。
$a = Get-NetTCPconnection ; $a[0] | fl *
とか見ていたら OwningProcess とかプロセス ID はありそうなのだけど。

あ、ポートを見てるプロセスだからサービスって可能性もあるよねぇ。
プロセス名だけわかっても svchost だらけだったりして結局なんやねんこれだったりすることもあるんじゃないかね。

そんなこんなで作ってみました。
Get-NetProcess

お勧めポイント
・管理者権限なくてもおおよそ netstat -b に類する情報拾える。
 一部実体ファイル情報が管理者権限でないと拾えてない場合アリ。
 管理者権限を利用可能で且つ万全を期したい場合は管理者モードで起動した PowerShell 上での実行を推奨。

・対象ポートを利用しているのがサービスだった時、該当するサービス名を主に表示する。
 ※ プロセス名 (Get-Process でとれる情報)か、
  サービス表示名 (Get-CimInstance (Get-Service)) で見えるわかりやすい名前で表示。
 ※ サービス管理ツールとかで表示されるわかりやすい名前。
   しかも「このサービスなんだっけ?」てならないように説明情報ももちろん含んで取得済み。

・netstat と違って、Get-NetProcess はオプション指定で情報抽出対象をローカルまたはリモートのアドレス
 やポート番号、あるいは名前で絞り込みが可能。
 例) Get-NetProcess -Name firefox

・Get-NetProcess | Export-Clixml -path CapturedInfo.xml
 などとして詳細情報を保存可能。

気にしてはいけないこと
・netstat -abn とか n オプション付きの netstat 爆速感を思うと遅くないですか?

・netstat コマンドだとローカルとリモートの情報が1画面に出てくるのに Binding Information て
 ローカル側情報しかなくないですか?
 → 基本的にローカルポートの使いたいポート先に使ってるやつ誰なんや?!を探したかったので
   基本はローカル情報を主に出してるのであります。
   リモートは? て人は -SelectRemote オプション付けてみて。
   リモートしか出てねぇじゃねぇかって突っ込みしたい人は -Summary にしてw

・netstat -a だとリモートアドレスのホスト名が出てるんですけど?
 → -CheckPTR オプション使ってみて。逆引きDNS はゾーン登録なしでできない場合が多くて
  この場合に Resolve-DnsName のタイムアウトが時間かかるので遅くなりますけれども。
  また、netstat はリモートアドレスの長いホスト名途中で切れているし、FQDN 出てないから
  情報不完全やぞw その点 Get-NetProcess には全部の情報が含まれているから、、、、

・「実はほかのこのツール使うともっと早いし情報とれるんですけど?」
 知らん、そんなツールは知らん。あったなら教えてくだされw


名前
    Get-NetProcess

概要
    ネットワーク通信などのプロセス名を調べます。


構文
    Get-NetProcess [[-LocalAddress] <String>] [[-LocalPort] <String>] [[-RemoteAddress] <String>]
    [[-RemotePort] <String>] [[-State] <String>] [[-Protocol] <String>] [[-SelectRemote]] 
    [[-SelectLocal]] [[-Summary]] [[-NoProgress]] [[-CheckPTR]] [[-Name] <String>]
    [[-ProcessName] <String>] [[-ServiceName] <String>] [<CommonParameters>]


説明
    ネットワーク通信などのプロセス名を調べます。


    -------------------------- 例 1 --------------------------

    PS C:\>Get-NetProcess

    ネットワーク通信ポート番号とプロセス情報を列挙します。




    -------------------------- 例 2 --------------------------

    PS C:\>$Results = Get-NetProcess

    ネットワーク通信ポート番号とプロセス情報を変数に格納します。

    $Results

    変数に保持した情報のサマリが表示されます。

    $Results[0] | fl *

    特定行の詳細を確認するには、パイプ接続して Format-List -Property * などで非表示のプロパティ値を
    確認できます
    詳細情報には以下の情報も含まれています。

    $Results[0].ProcessName  = Get-Process で確認できるプロセス名です。例:"spoolsv"
    $Results[0].ServiceName  = Get-Service で確認できるサービス名です。例:"Spooler"
    $Results[0].ServiceDisplayName = Get-Service で確認できるサービスの表示名です。
     例: "Print Spooler"

    $Results[0].Name = サービスの場合は ServiceDisplayName、そうでない場合は ProcessName を
   返します。

    $Results[0].FileName = この通信を利用している実体のファイル名。

    サービスの場合は $Results[0].ServiceDescription にどのようなサービス化の説明が含まれます。




    -------------------------- 例 3 --------------------------

    PS C:\>Get-NetProcess -LocalPort 8080

    Get-NetProcess -LocalAddress 192.168.10.10
    Get-NetProcess -LocalAddress 192.168.10.10 -LocalPort 8080

    指定した条件でフィルターした結果が表示されます。




    -------------------------- 例 4 --------------------------

    PS C:\>Get-NetProcess -RemotePort 443

    Get-NetProcess -RemoteAddress 192.168.10.10
    Get-NetProcess -RemoteAddress 192.168.10.10 -RemotePort 443

    指定した条件でフィルターした結果が表示されます。
    暗黙的に -SelectRemote -Protocol TCP オプションが指定された時と同じ挙動になります。




    -------------------------- 例 5 --------------------------

    PS C:\>Get-NetProcess -State Listen

    指定したステートの通信情報が表示されます。
    暗黙的に -Protocol TCP オプションが指定された時と同じ挙動になります。




    -------------------------- 例 6 --------------------------

    PS C:\>Get-NetProcess -Protocol TCP

    Get-NetProcess -Protocol UDP

    それぞれ指定したプロトコルの情報のみ列挙されます。
    既定値は TCP+UDP で両方表示されます。




    -------------------------- 例 7 --------------------------

    PS C:\>Get-NetProcess -RemotePort 443 -CheckPTR

    RemoteAddress について Resolve-DnsName で逆引き検索を行います。
    名前解決できない通信先の場合、タイムアウトするまで処理が停止したように見えるようになるため、
    処理完了までに時間を要するようになります。




    -------------------------- 例 8 --------------------------

    PS C:\>Get-NetProcess -NoProgress

    通常時 netstat コマンドの様に1件ずつ順次表示しますが、このオプションを指定すると
    表示すべき情報が全部そろってから出力します。




    -------------------------- 例 9 --------------------------

    PS C:\>Get-NetProcess -Summary

    通常時 Local Address + Local Port を組み合わせた "Binding Information" または
     Remote Address + Remote Port を組み合わせた "Remote Information" のいずれかを表示しますが
     -Summary オプションを付けると netstat コマンドの出力のように
     Local Address + Local Port + Remote Address + Remote Port をまとめて表示します。




    -------------------------- 例 10 --------------------------

    PS C:\>Get-NetProcess -Name spooler

    Get-NetProcess -ProcessName spoolsv
    Get-NetProcess -ServiceName spooler
    Get-NetProcess -ServiceName "Print Spooler"

    これらはいずれも"Print Spooler" サービスの情報を表示します。
    -Name オプションで指定した場合は、-ProcessName と -ServiceName に同じ値を指定したのと同じ検索を行い
    結果はマージされて一緒に表示されます。

    -ProcessName オプションは Get-Process コマンドで確認できる ProcessName と比較されます。
    -ServiceName オプションは Get-Service コマンドで確認できる Name および DisplayName と比較されます。




    -------------------------- 例 11 --------------------------

    PS C:\>Get-NetProcess -Name *cl*

    Get-NetProcess -ProcessName *cl*
    Get-NetProcess -ServiceName *cl*

    名前を指定して抽出対象を指定するパラメーターはワイルドカードが使えます。




SHIMSOFT-iTunesSearch (version 1.0)

Apple 製品のなにがしをしていると Mac / iPad / iPhone / Apple Watch のあたりで
アプリの情報をもうちょっと確認したくなることがあります。

とくにバンドル ID (bundleID) を確認するのが通常手順だと面倒くさい、

Apple の Web サイトか iPhone / iPad などの App Store でアプリを検索し、アプリの URL を確認。
App Store で見た場合には 「リンクのコピー」とかでメモとかに張り付けて確認。

URLに id=xxxxxxxx という ID 値 記載されているので、Web ブラウザで以下の URL にアクセスする。
https://itunes.apple.com/lookup?id=xxxxxxx&country=jp

すると、アプリの情報を含んだ JSON形式データがダウンロードされるので、それを
テキストエディタで開いて、bundleID の項目を探す、、、と

確認する対象が 1個や2個なら我慢できるけれど たくさんある時は面倒すぎてやってられん。

Windows PC からの時、今の Windows 版 iTunes アプリでは App Store 機能なくなっているから
Apple の Web サイトで検索するしいかないのだけれども、どうもいろいろ試していると
既定検索してくれるのは iPhone/iPad 共通アプリだけで、iPad 専用アプリは出てこない。
見つけたいアプリのメーカー名で検索して、iPhone 用アプリ適当なのクリックして、
その結果画面からメーカー名のリンククリックして、そのメーカーが提供しているアプリ一覧を出すと、
そこに iPad 用アプリが列挙されていて、そこには探したい iPad 専用アプリ出てくるので
それをクリックすると URL わかり、ID がわかる・・・

やってられん過ぎる orz...

JSON 形式データもダウンロードしたのをテキストエディタでそのまま開いても読みにくいし、、、

そこでいろいろ確認していると、検索に利用できそうな Web サービスが以下の2つと判明。
//itunes.apple.com/search
//itunes.apple.com/lookup

どっちも結果を JSON 形式で返してくれる。
これをもうちょっと使いやすいように準備してしまうにこしたことはない。

そんなわけで作ってみました。

含まれるコマンド
Get-iTunesAppInfo
Get-iTunesArtistInfo
Get-iTunesMusicInfo



構文
    Get-iTunesAppInfo [-Term] <String> [[-Platform] <String>] [[-Country] <String>] [[-AppID]] [[-Developer]] [[-BundleID]] [[-FilterMode] <String>] [[-DeveloperID]] [<CommonParameters>]


説明
    Apple App Store / Apple Mac App Store のアプリ情報を検索します。
    MDM などでアプリの制御に利用する BundleID を比較的容易に確認できます。

    -------------------------- 例 1 --------------------------

    PS C:\>Get-iTunesAppInfo -Term Pages -Platform iPhone

    "Pages" を AppName に含む「iPhone」用アプリ情報を情報を列挙します。




    -------------------------- 例 2 --------------------------

    PS C:\>Get-iTunesAppInfo -Term Pages -Platform Mac

    "Pages" を AppName に含むの「Mac」用アプリ情報を情報を列挙します。




    -------------------------- 例 3 --------------------------

    PS C:\>Get-iTunesAppInfo -Term "Microsoft Word"

    "Microsoft Word" を AppName に含むの「iPhone」「iPad」用アプリ情報を情報を列挙します。




    -------------------------- 例 4 --------------------------

    PS C:\>Get-iTunesAppInfo -Term "Microsoft Word" -FilterMode Equal

    FilterMode オプションで Equal を指定すると Term に指定した文字列と一致する情報となるようにフィルターします。




    -------------------------- 例 5 --------------------------

    PS C:\>Get-iTunesAppInfo -Term 361285480 -AppID

    確認したいアプリの ID が判明している場合、Term オプションに ID を指定し、 -AppID オプションを指定することで
    アプリ情報を確認できます。




    -------------------------- 例 6 --------------------------

    PS C:\>Get-iTunesAppInfo -Term "361285480,361309726,361304891" -AppID

    確認したいアプリの ID が複数ある場合、カンマ区切りで文字列指定し、 -AppID オプションを指定することで
    一括でアプリ情報を確認できます。




    -------------------------- 例 7 --------------------------

    PS C:\>Get-iTunesAppInfo -Term apple -Developer

    "apple" を ArtistName に含むの「iPhone」「iPad」用アプリ情報を情報を列挙します。




    -------------------------- 例 8 --------------------------

    PS C:\>Get-iTunesAppInfo -Term com.apple.mobileme.fmf1 -BundleID

    "com.apple.mobileme.fmf1" という BundleID のアプリ情報を情報を列挙します。




    -------------------------- 例 9 --------------------------

    PS C:\>Get-iTunesAppInfo -Term "com.apple.mobileme.fmf1,com.apple.MobileAddressBook" -BundleID

    確認したいアプリの BundleID が複数ある場合、カンマ区切りで文字列指定し -BundleID オプションを指定することで
    一括でアプリ情報を確認できます。

-Term <String>
    検索するキーワードを指定します。スペースを含む場合は "Microsoft Word" の様にします。

    必須                         true
    位置                         2
    既定値
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-Platform <String>
    アプリの対象プラットフォームを指定します。
    iPhone              : iPhone 用アプリ
    iPad                : iPad 用アプリ
    Mac         : Mac 用アプリ
    iPhone+iPad : iPhone / iPad 用アプリ混合
    All         : iPhone / iPad / Mac 用アプリ混合

    デフォルト値は "iPhone+iPad"

    必須                         false
    位置                         3
    既定値                       iPhone+iPad
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-Country <String>
    AppSotre の国コードを指定します。デフォルト値は "jp" です。

    必須                         false
    位置                         4
    既定値                       jp
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-AppID [<SwitchParameter>]
    App の URL などから ID  情報が判明している場合、ID を指定して検索することができます。

    必須                         false
    位置                         5
    既定値                       False
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-Developer [<SwitchParameter>]
    Term に指定したキーワードが開発者名である場合、このオプションを指定することでよりある程度フィルタして結果を出すことができます。

    必須                         false
    位置                         6
    既定値                       False
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-BundleID [<SwitchParameter>]
    Term に指定したキーワードが BundleID ある場合、このオプションを指定することでよりある程度フィルタして結果を出すことができます。

    必須                         false
    位置                         7
    既定値                       False
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-FilterMode <String>
    None, Equal, Like のいずれかを指定します。デフォルト値は Like です。
    検索結果が Term にどれほど近いかをフィルタする方式が変ります。
    FilterMode 未指定の時に、目的のものが見つからない場合は、None を指定してみてください。
    アプリ名が正確にわかっている場合は Equal を指定することでより発見しやすくなります。

    必須                         false
    位置                         8
    既定値                       Like
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-DeveloperID [<SwitchParameter>]

    必須                         false
    位置                         9
    既定値                       False
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false




構文
    Get-iTunesArtistInfo [-Term] <String> [[-TermType] <String>] [[-Search] <String>] [[-ArtistType] <String>] [[-Country] <String>] [[-ArtistID]] [[-FilterMode] <String>] [<CommonParameters>]


説明
    iTunes Store の Artist 情報を検索します。


    -------------------------- 例 1 --------------------------

    PS C:\>Get-iTunesArtistInfo -Term 広島綾子

    アーティスト名で検索する場合




    -------------------------- 例 2 --------------------------

    PS C:\>Get-iTunesArtistInfo -Teem "広島*綾子"

    アーティスト名の姓名のは間に半角スペースの有無など不明な場合、ワイルドカードの "*" を指定します。




    -------------------------- 例 3 --------------------------

    PS C:\>Get-iTunesArtistInfo -Term Apple -ArtistType SoftwareArtist -FilterMode Equal

    "Apple" というソフトウェア開発者を探す場合。
    Term に "Apple" と指定し、ArtistType オプションで "SoftwareArtist" を指定して種別を限定します。
    且つ、FilterMode オプションに "Equal" を指定し、Term と同じ文字列を持つものだけにフィルタします。

    Term に "Apple" のみの場合、"Apple" を ArtistName に含むすべてのアーティストが検索結果に含まれ、
    名前が "Apple Bank" など "Apple" ではないものや音楽系のアーティストも含まれてしまいます。




構文
    Get-iTunesMusicInfo [-Term] <String> [[-TermType] <String>] [[-WhatIs] <String>] [[-Country] <String>] [[-SongID]] [[-AlbumID]] [[-Artist]] [[-ArtistID]] [[-FilterMode] <String>] [<CommonParameters>]


説明
    iTunes Store の楽曲情報を検索します。

    -------------------------- 例 1 --------------------------

    PS C:\>Get-iTunesMusicInfo -Term 広島綾子 -Artist -WhatIs Album

    アーティスト「広島綾子」のアルバムを表示します。

-Term <String>
    検索するキーワードを指定します。スペースを含む場合は "Microsoft Word" の様にします。

    必須                         true
    位置                         2
    既定値
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-TermType <String>
    検索キーワードの種類を指定します。

    mixTerm = デフォルト値。複合。
    genreIndex = ジャンルを指定
    artistTerm = アーティスト名を指定
    composerTerm = コンポーザーを指定
    albumTerm = アルバムを指定
    raitingIndex = レートを指定
    songTerm = 曲名を指定
    producerTerm = プロデューサーを指定

    必須                         false
    位置                         3
    既定値                       mixTerm
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-WhatIs <String>
    検索対象を指定します。
    musicTrack = musicTrack が対象になります。
    album = アルバムが対象になります。
    musicVideo = ミュージックビデオ が対象になります。
    mix = 複合。
    song = デフォルト値。歌が対象になります。

    必須                         false
    位置                         4
    既定値                       song
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-Country <String>
    AppSotre の国コードを指定します。デフォルト値は "jp" です。

    必須                         false
    位置                         5
    既定値                       jp
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-SongID [<SwitchParameter>]
    楽曲の URL などから ID  情報が判明している場合、ID を指定して検索することができます。

    必須                         false
    位置                         6
    既定値                       False
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-AlbumID [<SwitchParameter>]
    アルバムの URL などから ID  情報が判明している場合、ID を指定して検索することができます。

    必須                         false
    位置                         7
    既定値                       False
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-Artist [<SwitchParameter>]
    Term に指定したキーワードがアーティスト名である場合、このオプションを指定することでよりある程度フィルタして結果を出すことができます。

    必須                         false
    位置                         8
    既定値                       False
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-ArtistID [<SwitchParameter>]
    アーティストの URL などから ID  情報が判明している場合、ID を指定して検索することができます。

    必須                         false
    位置                         9
    既定値                       False
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false


-FilterMode <String>
    Term に指定したキーワードが ArtistName に含まれる度合いを指定します。
    None、Like、Equal から指定します。
    規定値は "None" です。

    "None" を指定した場合、iTunes 検索結果のリストをそのまま出力として使用します。
    ArtistName に指定した Term が直接的に含まれていないものが結果に含まれる可能性があります。

    "Like" を指定した場合、iTunes 検索検索結果に Term 文字列が含まれるもののみをフィルタして返します。
    意図した検索結果が見つかりやすくなります。

    "Equal" を指定した場合、iTunes 検索結果のリストから Term 文字列と同じもののみをフィルタして返します。
    検索対象の登録名称などを知っている場合に検索結果を見つけやすくなる場合があります。

    必須                         false
    位置                         10
    既定値                       None
    パイプライン入力を許可する   false
    ワイルドカード文字を許可する false