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.4)

含まれるコマンド
ConvertTo-Narrow
ConvertTo-Wide
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>]
マイクロソフト社製品の製品名からライフサイクル情報を確認します。
除法ソースはこちらの CSV ダウンロード機能を勝手に利用 https://support.microsoft.com/api/lifecycle
インターネットに接続できない環境の場合は利用できません。

    -------------------------- 例 1 --------------------------
    PS C:\>Get-MSProductLifeCycle -Product "Exchange Server 2010"



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

SHIMSOFT-Holidays (version 2.0)

とある製品のスケジュールジョブ設定の柔軟性があるようなないような状況に見舞われ、
準備されているスケジュールパターンを選ぶか、そうでなければ指定日を 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年限定の祝日テンプレートを追加。
「体育の日」が「スポーツの日」に改名されることにも対応。


含まれるコマンド
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" テンプレートの複合結果が得られます。