俺のメモ帖

とあるインフラ系SEのメモ帖。趣味や技術的なもとか書けたらいいなぁ。

PowerShellのスクリプトの実行について(Set-ExecutionPolicy)少しだけ嵌ったこと

PowerShellって、デフォルトだとスクリプトの実行が禁止されている。

そんなときに使うのが、「Set-ExecutionPolicy」ですよね。

Set-ExecutionPolicy RemoteSigned

 

で、このままの状態で開発を進めて、手動でスクリプト動かして単体テストも完了。

じゃあ、いざジョブスケジューラにジョブと登録して、ジョブとして実行・・・

あれ、動かない?

 

原因を調べたところ、思わぬところに原因がありました。

それは32bit環境と64bit環境の両方でそれぞれ「Set-ExecutionPolicy」しなければいけないということ。

というのは、使用した某N○I社製のジョブスケジューラは、基本的に32bit環境でジョブを実行する。

普通(Windows2008R2以降のサーバOSの場合)、スタートメニューやコマンドプロンプトとかから、「PowerShell.exe」で起動した場合は、64bit環境で起動され、それで不都合が発生しなければそのまま64bitしか使わないと思います。

なので、普通にPowerShell起動して、「Set-ExecutionPolicy」して終わりです。

でも、実はこれだと64bit環境にはポリシーが設定されても、32bit環境にはポリシーは設定されません。

つまりは、32bit環境ではスクリプトの実行は禁止されたまま。

なので、スタートメニューから、PowerShellの32bit環境を起動してやり、そちらの窓でも「Set-ExecutionPolicy」を実行しなければいけなかったのです。

 

そのジョブスケジューラ、最新版でも未だに動作環境32bitのままなのかな・・・?

Windows Server 2008 R2以降、サーバOSは32bit版は既に存在してない。

かつ、32bit版が存在するWindows Server 2008はサポートが2020年1月14日で終了してしまうというのに・・・。

 

 

実はこのデフォルト実行環境が32bitっていうジョブスケジューラでジョブを実行するにあたって、実行環境が32bitっていうところが結構いやらしくて、じゃあPowershell32版の実行ポリシーRemoteSignedに変更すれば万事おっけーって感じでもなくて、そのPowershellスクリプトでは、Share Point Server 2010関連の処理を実行してて、SharePoint Server2010は32bit版というのが存在してなくて結局32bit動作環境ではSharePoint関連のコマンドレット動かなくて、もう一工夫必要だったりと時代遅れ感満載のジョブスケジューラでした。

作ったシステムリプレースもうすぐらしいけど、担当者がんばってください。

バッチで簡単に前日日付、翌日日付などを変数に設定する方法

 バッチファイルにて、日付を処理することはよくあると思う。
昔は、わざわざ日付計算用の関数をバッチで100ステップかけて作ったり、計算用のVBSを作ってみたり、いろいろ手間をかけてたと思う。

今は、PowerShell使えば1行で書ける。

当日日付の取得

FOR /F "usebackq delims=" %a in (`powershell "(get-date).ToString(\"yyyy/MM/dd\")"`) do Set TODAY=%aa

【説明】

実行結果を変数に格納する、FOR文にて、``で囲んだコマンドを実行結果を取得する"usebackq"オプションを使用。
実行するコマンド自体はPowerShellを使う。
Get-Dateで当日日時が取得できる。
当然「日時」なので、このままだと「2018年10月26日 9:04:14」といった感じになる。
なので、Get-Dateの結果をToStringでフォーマットを指定する。
フォーマットを好きに指定できるということは、当然よく利用される『YYYYMMDD』形式とかでも出力できる。その場合は"yyyyMMdd"と指定すればよい。

 

前日日付の取得

FOR /F "usebackq delims=" %a in (`powershell "(get-date).AddDays(-1).ToString(\"yyyy/MM/dd\")"`) do Set PREDAY=%aa

【説明】

当日日付の取得方法をほぼ応用。
Get-Dateの結果は、DateTime型のため、そのまま日付計算のAddDayメソッドを使用して、1日前なので引数に「-1」を指定する。

 

翌日日付の取得

FOR /F "usebackq delims=" %a in (`powershell "(get-date).AddDays(1).ToString(\"yyyy/MM/dd\")"`) do Set NEXTDAY=%aa

【説明】

当日日付の取得方法をほぼ応用。
Get-Dateの結果は、DateTime型のため、そのまま日付計算のAddDayメソッドを使用して、1日後なので引数に「1」を指定する。

 

当月月初日の取得

FOR /F "usebackq delims=" %a in (`powershell "(get-date -Day 1).ToString(\"yyyy/MM/dd\")"`) do Set FIRSTDAY=%aa

【説明】

Get-Dateコマンドレット実行時の引数として、「-Day 1」を指定することで、日付部分が1日の結果が返される。

当月月末日の取得

FOR /F "usebackq delims=" %a in (`powershell "(get-date -Day 1).AddMonths(1).AddDays(-1).ToString(\"yyyy/MM/dd\")"`) do Set LASTDAY=%aa

【説明】

当月月初日を利用した応用編。
当月月初日から1ヵ月後の翌月月初日付をAddMonthsメソッドで算出し、その日付の現実をAddDaysメソッドで取得する。

 

まあ、結局のところ、PowerShellワンライナーでできることの結果ならバッチファイルで書けるんでいけますね。

これだけで、バッチファイルでできること、今よりぐっと広がります。
なんたって、.NET Frameworkがだいたい使えることになりますから。

Windows PowerShellクックブック

Windows PowerShellクックブック

 

 

 

欠点は、、、、PowerShellちょっと重たいことと、、、あまりに複雑な処理書くとわかりにくくなることとか。

あとは、PowerShellが使用できるバージョンのWindowsでないといけないこととかかな?

上記のPowershell部分、もっとよい書き方があれば教えてもらえるとうれしいです。

 

以上

シャープ製加湿空気清浄機の最新機種「KC-J50」と旧機種「KC-F50」「KC-G50」「KC-H50」を比較してみる

 

現行機種「KC-H50」と次期機種「KC-J50」の相違点

シャープ製加湿空気清浄機の最新機種「KC-J50」が発表されましたね!

早速、ひとつ前の機種「KC-H50」との相違点を探してみました。
機種名、今までF、G、Hと来てたんで、今回はIかなと思ったら一つ飛ばしてJでした・・・なんでや?

 

いやあ、Sonywalkmanとかと違って、公式にちゃんと比較表があるので便利です。

仕様比較表(KC-J50/KC-H50)|空気清浄機|サポート・お問い合わせ:シャープ

比較表から相違点を洗い出した結果、以下の相違点がありました。

  • 静音運転時の消費電力が0.2W少なくなりました。
    それに伴い、静音運転時の1時間あたりの電気代が0.01円安くなりました!
  • 高さが2mm小さくなりました。
  • 質量が200g軽くなりました。

今回もマイナーバージョンアップのようです。

 

まだAmazonには登場しておらず、実売価格は不明ですが、まあ2万ちょっとってとこでしょうかね。

10/21に再度探してみたら、Amazonに登場してました。

発売直後だけあって、アホみたいに高いですね!(笑)
機能うんぬんではなく、43000円とか価格的に論外!
※ここで記載した価格は10/21時点です。変動してる可能性があるので各自で調べてみましょう。

 

現行機種「KC-H50」と旧機種「KC-G50」「KC-F50」の相違点

現行機種と旧機種の相違点は、以下の過去記事参照。 

infrase.hateblo.jp

上記の記事を書いた時は、「KC-F50」があるうちはそっちが良いと結論付けていました。

 

現在の価格を鑑みてどれを買うか?

 現行機種「KC-H50」はというと、およそ2万2千円。 

シャープ プラズマクラスター搭載 加湿空気清浄機 KC-H50-W
 

一つ前の機種の「KC-G50」はというと、およそ1万7千円。 

さらに前の機種の「KC-F50」は、 なんと3万4千円に値上がり!
品薄になってしまったのですかね?

 現在は、一番機能満載の「KC-F50」が、約2倍に値上がりしてしまい、お得感がなくなってしまっています。

 

じゃあ現行機種の「KC-H50」が良いのかというと・・・性能全く同じなのに、5000円も高いので、現時点でのお勧めはズバリ「KC-G50」ですね! 

 しばらくは旧機種を買って、差額でついでに交換用フィルターとか買っておけばよいかと! 

以上!

空気清浄機はwalkman以上に変化がなくて比較のしようがない!!

Sony walkman NW-A50シリーズの購入に関するキャンペーンとかとか

10月6日に発売されたSony Walkman Aシリーズの最新機種である、NW-A50シリーズ。

前回比較記事を書いた際は、23,630円という価格で、NW-A30シリーズの最安値と比較して、およそ3700円の価格差がありました。

 

infrase.hateblo.jp

 いざ発売開始したところ、Amazonでは現在、22,464円となっており1200円ほど安くなっています。

 

で、なんかNW-A50シリーズ購入に伴うキャンペーンとかやってないか調べてみたところ、以下のようなキャンペーンを実施していました。

www.sony.jp

要約すると、NW-A50シリーズを購入すると、以下の特典が受けられる。

  • moraポイント1,000円分のクーポンコードをプレゼント
  • 「2007年~2012年に発売のメモリータイプウォークマン」またはiPod全機種からの乗り換えの場合は、2000円をキャッシュバック。
    ※申し込み時に、上記と購入機種のシリアルが一緒に写っている画像が必要なので、旧機種を手放す前に撮影しときましょう。

つまりおよそ3000円分の値引きが受けられる!

ということは・・・NW-A30・NW-A40の最安値よりも実質的に安くなる!!

 

これなら新規に購入する人は、NW-A55とかの最新型を買った方がよいですね!!
前回の記事でNW-A30シリーズ買って、差額でSDカード買えば?って言ってましたが、このキャンペーンがあるなら、最新型購入で問題ないと思います!!

 

ついでに、MicroSDカード128GB、前のやつより安いの見つけました。

 サンディスクから3,180円!!
200GBでも4998円という安さ!

 自分は1枚128GB買いましたが、しばらく使ってみてまったく問題ないです。
販売元もサンディスクになってるんで安心かと思います。

・・・まあはずれというのもたまにあるのかもですが、Amazonで買う分には外れ引いたら返品すればいいんでね、リスクというほどではないですね。

 

この情報がお役に立てれば幸いですな。