社内SEの徒然なる日記

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

Windowsのスタートアップ/シャットダウンスクリプトが実行されない

■ スクリプト実行問題

前回、Windows10のgpedit.mscを使用してパソコンの電源ON/OFFの時に自動的にスクリプトを実行される記事を書きました(Windowsで終了時に処理を実行したい)。

なのですが、どうも動いている形跡がありません。テストのときには問題なく動いていたのですが、これは一体・・・

何かヒントがないかと思って、電源を入れた辺りのログ見ていたら、何やらスリープ状態から再開とか出ています。
起動スクリプト動作問題 - 1

操作としては、こうやってシャットダウンしていました。改めて、この方法でシャットダウンしたのですが結果は変わらず。
起動スクリプト動作問題 - 2

Windows10(8からだったか?)の頃から、電源OFFの時の動作がスリープになるようなことは聞いた覚えがありますが、まさかこれが原因なのか?

上記のシャットダウンをShiftキーを押しながら実行すると、完全にシャットダウンされるらしいので試してみたのですが、そうすると処理が動いてくれました。

毎回Shiftキーは辛いので、高速スタートアップを無効にしました(手順は、過去の記事を参照:Windowsで起動時に自動的にNumlockをオンにする)。起動/終了処理が若干遅くなりましたが、私のパソコンはSSDなので大差ありません。これで良しとしましょ。

■ 後書き

それにしても、これってバグの一種じゃないかと思います。よく言っても考慮不足。

いつかのNumLockの時も同じような現象が出ましたが、明示的にシャットダウンの操作として設定した内容が、シャットダウンという操作をしても反映されないというのは変だと思います。

将来的にパッチで直るなら良いのですが、多分、このままなのでしょうね。

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

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

PageTop

Windowsで起動時に自動的にNumlockをオンにする

■ NumLock

この前、パソコンをWindows10に乗り換えたのですが、パソコン起動時に数字キー(テンキー)が入力できません。何かと思ったら、NumLockがOFFになっています。

そういえば、以前のPCでも初期設定時にNumLockをONにするようにレジストリキーをいじった記憶があります。

■ Windows7まで(レジストリキーの修正)

「Windowsロゴ」を右クリックして、「ファイル名を指定して実行」をクリックします。
Windowsで起動時に自動的にNumlockをオン - 1

regeditと入力してOKをクリックします。
Windowsで起動時に自動的にNumlockをオン - 2

「HKEY_USERS」-「.DEFAULT」-「Control Panel」-「Keyboard」をクリックして、「InitialKeyBoardIndicators」の値を2に書き換えます。
Windowsで起動時に自動的にNumlockをオン - 3

これでOK!

・・・だったはずなのですが、既に2になっていました。設定方法が変わったのかな?
(パソコンの初期設定は別の方にやってもらっていたので、以前の方法で設定したものと思われます)

■ Windows10(レジストリキーの修正&高速スタートアップ

調べてみると、Windows10では設定する値が異なっているそうです。

ということで、値を「2147483650」に書き換えました。
Windowsで起動時に自動的にNumlockをオン - 4

だが、これでも直りません。どうやら、Windows10の場合はさらに考慮が必要らしいのです。

「Windowsロゴ」を右クリックして、「コントロールパネル」をクリックします。
Windowsで起動時に自動的にNumlockをオン - 5

「システムとセキュリティ」をクリック。
Windowsで起動時に自動的にNumlockをオン - 6

「電源オプション」をクリック。
Windowsで起動時に自動的にNumlockをオン - 7

「電源ボタンの動作の選択」をクリック。
Windowsで起動時に自動的にNumlockをオン - 8

「現在利用可能ではない設定を変更します」をクリック。
Windowsで起動時に自動的にNumlockをオン - 9

高速スタートアップを有効にする(推奨)」をOFFにして、「変更の保存」をクリック。
Windowsで起動時に自動的にNumlockをオン - 10

ここまでやって、ようやく起動時にNumLockがONになりました。

■ 後書き

この結果から、「高速スタートアップを有効にする」がONだと、本来は起動時に初期化される(というか取得すると言うべきか)情報がどっかに抱えられたままになるのだと思います。

多分、この辺りの技術情報は探せば出てくると思うのですが、面倒なので調べる気になりませんでした。

しかし、この高速スタートアップって良さそうで悪い。設定した内容が思うように反映しないって結構致命的な気がします。何というか、Windowsファイアーウォールに匹敵する嫌らしさです。

・・・まぁ、私のパソコンのディスクはSSDなので、どっちでも大差ない時間で起動するんで高速スタートアップなんて使えなくても良いんですけどね。

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

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

PageTop

PowerShellの実行ポリシーを変更してみた(Windows10)

■ Windows10

パソコンがWindows7からWindows10(64bit)に変わったのですが、これまで使っていたPowerShellのスクリプトを実行すると、エラーが発生しました。


このシステムではスクリプトの実行が無効になっているため、ファイル D:¥*****¥StartDate.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(http://go.microsoft.
com/fwlink/?LinkID=135170) を参照してください。
+ CategoryInfo : セキュリティ エラー: (: ) []、ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess




そういえば、PowerShellって最初に実行ポリシーを変更する必要がありましね(powerShellの実行ポリシーを変更してみた(Windows7))。

前とメッセージが違っている気がしますが、良くあることかと思って下記のコマンドを実行しました。


Set-ExecutionPolicy RemoteSigned



すると、再びエラーが発生しました。


Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥PowerShell¥1¥ShellIds¥Microsoft.PowerShell' へのアクセスが拒否されました。 既定 (LocalMachine) のス
コープの実行ポリシーを変更するには、[管理者として実行] オプションを使用して Windows PowerShell を起動してください。現在のユーザーの実行ポリシーを変更するには、"Set-ExecutionPolicy -Scope CurrentUser" を実行してください。
発生場所 行:1 文字:1
+ Set-ExecutionPolicy RemoteSigned
+ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand




・・・・・・・・そうですか。まぁ、良いですけどね。

ってことで、「スタート」-「Windows PowerShell」-「Windows PowerShell」を右クリックして、「その他」-「管理者として実行」で起動して、同じコマンドを実行しました。


Set-ExecutionPolicy RemoteSigned




実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"):




うん、良い感じです。このまま Y を入力してEnterキー押下。これで動くようになりました。

■ 後書き

Windows10になってから、やたらと「管理者として実行」が云々とかいう警告が表示されるようになりました。大抵の場合、そのまま「はい」と押せば処理が実行できちゃうのですが、これ、何の意味があるんでしょう?

セキュリティ向上の一環だとは思いますが、私が使っている環境では、単にオペレーションが増えて面倒になっただけです。何だかね。

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

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

PageTop