社内SEの徒然なる日記

PowerShellで圧縮したい(Compress-Archive)


PowerShellWindowsの機能を使用した圧縮をしたいです。それも、コマンドで。Makecabコマンドだとフォルダごとバサッと圧縮するのが大変だし、CompactやCompressはファイルシステム(NTFS)の機能なので求めているものとちょっと違う。

Windowsの標準機能では実現できないのかと思っていたのですが、パソコンをWindows10に変えたところ圧縮コマンドが使えるようになりました。

Compress-Archive [圧縮するファイル or フォルダ] [圧縮結果のファイル名]

実際に実行したところ、サクッと動きました。うん、これは便利。
PowerShellで圧縮したい(Compress-Archive) - 1

ちなみに、圧縮結果のファイル名に拡張子を設定しなかった場合は .zip を追加してくれるようです。

動作としては正しいのでしょうが、場合によっては拡張子をzip以外にしたい場合もあるので、これはちょっと考えものです。いや、出来上がったzipファイルをリネームすれば良いだけの話ですけどね。

■ 後書き

なお、これは PowerShell v5 からの機能らしくて、まだ複雑なオプションとかは無いようです。ま、複雑なオプションがあっても使いこなせないので、これで十分とも言えます。

圧縮の目的は、あるソフトウェアのバックアップです。ソフトウェアのコマンドでバックアップを取得して、それをNAS(LANで接続)に保存しているのですが、ファイル数が多いのでファイルサイズの割に時間がかかっていました。

そこで、圧縮して一つのファイルにしてからNASに保存しようと思ったのです。そして、サーバー機には出来るだけソフトを追加したくなかったので、Windowsの標準機能でやりたかったという訳です。

しかし、意気揚々とコマンドを使おうと思ったのですが、肝心のWindowsサーバーの方では動いてくれませんでした。

・・・PowerShellのバージョンかな?

ソフトを追加したくないのと同じ理由でPowerShellのバージョンも変えたくないし、別の手段を考えようかな。

最新の記事:http://harikofu.blog.fc2.com/
投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop

Windows2012Serverに自動ログインする方法

■ 自動ログイン

ちと事情があって、サーバー起動時にWindows2012Serverに自動ログインする必要が出てきました。一昔前は、確かレジストリを操作する必要があったと思ったのですが、今ってどうなんでしょうね?

と、思いながら調べてると、随分と簡単に設定できるようになっていました。

Windowsロゴを右クリックして、メニューから「ファイル名を指定して実行」をクリック。
自動サインイン - 1

netplwiz と入力して「OK」をクリック。
自動サインイン - 2

上の方のチェックをOFFにして、「OK」をクリック。
自動サインイン - 3

自動ログインするユーザー名とパスワードを入力して、「OK」をクリック。
自動サインイン - 4

■ 後書き

設定画面を見ていると、タイトルバーの表示が「自動サインイン」となっています。昔はログイン/ログアウトが一般的だと思ったのですが、最近はサインイン/サインアウトという言葉を良く聞くようになりました。

本質が変わらないのに、言葉だけ変えるのって私は嫌い。ま、それぞれ事情は理解できなくもないのですがね。

なお、最初に事情があってと書きましたが、サインインしていないと動かないクライアントソフトを自動起動させたかったのが、その事情です。

仮想化に対応しているソフトなのに、クライアントソフトの起動が動作前提で、サインインしていないとダメっていうのは、なんだか片手落ちって気がしてなりません。

最新の記事:http://harikofu.blog.fc2.com/
投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop

Windows10 Creators Updateが動いた結果、高速スタートアップが再開された

■ Windows10 Creators Update

先週の金曜日、帰宅しようとしてシャットダウンをしようとしたら終了メニューにWindowsUpdateの通知が届いています。

「更新してシャットダウン」にして、後は来週にしようとしたのですが手が滑って「更新して再起動」を選んでしまった結果、これが終わらない。

後日知ったのですが、Windows10 Creators Update とやらに更新されたらしいです。そういえば、ちょっと変わったWindowsUpdateの通知が来ていた様な気がしますが、少し前にWindows10に変えたばかりということもあって、そういうものかと思ってスルーしてました。

結構高スペックなマシンなのですが、30分以上待つ羽目になりました。

■ 何か変

週明け、パソコンの電源を入れてWindowsにログインしようとすると、テンキーから数値が入力出来ません。NumLockは自動的にONになるように設定していた筈(Windowsで起動時に自動的にNumlockをオンにする)なのですが、これは一体・・・

その時は色々と仕事が詰まっていたこともあって見なかったことにしたのですが、ふと気が付くとグループポリシーオブジェクトに登録したスタートアップスクリプト(Windowsで終了時に処理を実行したい)も実行されていないようです。

まさかと思って、電源オプションの設定を見ると、高速スタートアップが有効になっています。
Windows10 Creators Update - 1

・・・おい!

■ 後書き

いや、分からないわけじゃない。大規模なアップデートをするなら環境設定を初期化した方が安全だってのは分かる。

でも、OSが標準で提供する機能を使っているのに、それを無視するってどういう了見だよ?

愚痴ってもしょうがないので高速スタートアップを無効にしましたが、何だか釈然としません(いや、いつものことなんだけどさ)。

最新の記事:http://harikofu.blog.fc2.com/
投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop

FTPのコマンド実行でファイルをアップロード出来ない(Windows2012)

■ FTP

PowerShellからFTPでサーバーに接続して、ファイルをアップロードしようとするとエラーになりました。
FTPが動かない - 1

FTPで接続自体は出来るけど、データ転送でエラーになる。そしてエラーコードが425ってことは、どっかで通信が止まっているかな?

■ Windowsファイアウォール

Windowsサーバで通信が通らないときに最初に疑うのはWindowsファイアウォールです。っていうか、間違いなくこいつが原因。

最初は、FTPで使うポート(20、21)辺りを開放すれば良いのかと思ったのですが、その設定を追加しても結果が変わらないので、FTPのプログラム自体を許可することにしました。

「コントロール パネル」 - 「システムとセキュリティ」 - 「Windows ファイアウォール」を表示します。

Windows ファイアウォールを介したアプリまたは機能を許可」をクリック。
FTPが動かない - 2

「別のアプリの許可」をクリック。
FTPが動かない - 3

「参照」をクリック。
FTPが動かない - 4

「C:¥Windows¥System32¥ftp.exe」を選択して「開く」をクリック。
FTPが動かない - 5

「追加」をクリック。
FTPが動かない - 6

「OK」をクリック。
FTPが動かない - 7

この設定後、FTPを実行するとアップロードが出来るようになりました。
FTPが動かない - 8

■ 後書き

万全を期すなら、32bitアプリで使用するFTP.exeの方も許可した方が良いかと思います。場所は「C:¥Windows¥SysWOW64¥ftp.exe」です。

なお、全力でスルーしたのですが見ての通り文字化けが酷いです。文字コードが違うのかとも思ったのですが、どちらもshift-jisのようだし、対応方法が分かりませんでした。

本当は、折角のPowerShellなんだし「Invoke-WebRequest」辺りに書き換えた方がスッキリする気もするんですけどね。

最新の記事:http://harikofu.blog.fc2.com/
投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop

PowerShellでファイルのタイムスタンプを一括変更

■ jsp

とあるシステム開発で、基準日以降に更新されたファイルの一覧を抽出する処理があるのですが、サーバー移行とか色々とあってファイルの更新日時が書き換わってしまいました。

さて、どうやって復元しましょうかね。

■ 取得

更新日付の取得は、「Get-ItemProperty」コマンドレットで出来るようです。

「aaaa.ps1」というファイルの更新日付を取得してみます。
PowdrShellで更新日付を変更 - 1


PS D:¥> Get-ItemProperty aaaa.ps1


ディレクトリ: D:¥


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2017/03/14 14:28 569410 aaaa.ps1


PS D:¥> (Get-ItemProperty aaaa.ps1).LastWriteTime

2017年3月14日 14:28:39


PS D:¥> (Get-ItemProperty aaaa.ps1).LastWriteTime.ToString('yyyy/MM/dd HH:mm:ss')
2017/03/14 14:28:39
PS D:¥>


単純に実行、LastWriteTimeを追加、ToStringで整形と試してみましたが、良い感じで取得できそうです。

■ 変更

更新日付を変更するには、「Set-ItemProperty」コマンドレットを使います。実行して、再取得してみたのですが上手いこと更新日付が変わってくれました。
PowdrShellで更新日付を変更 - 2

PS D:¥> Set-ItemProperty aaaa.ps1 -Name LastWriteTime -Value '1999/07/19 21:35:10'
PS D:¥> (Get-ItemProperty aaaa.ps1).LastWriteTime.ToString('yyyy/MM/dd HH:mm:ss')
1999/07/19 21:35:10
PS D:¥>


■ 後書き

ちなみに、作成日付は「LastWriteTime」の部分を「CreationTime」に変えるだけで同じことが出来ました。

最初の話に戻りますが、更新日付を書き換えたいファイルって数百件あります。最初はループ処理でも作ろうかと思ったのですが、面倒になってファイルの数だけ「Set-ItemProperty」を書き込んだスクリプトを作って実行することにしました。そのスクリプトが「aaaa.ps1」だったりします。

要件が「基準日以降に更新されたファイル」で、基準日がコロコロ変わるものでもなかったので、一括変更で十分だったのです。

最新の記事:http://harikofu.blog.fc2.com/
投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop