トップ回答者
タスクスケジューラ実行時にパスを取得できない

質問
-
メールを送信するスクリプトを作成しています。
右クリックからの実行時は問題ありませんが、タスクスケジューラからの実行時には
c:\windows\System32が実行フォルダになるようなので、Set-Locationにてスクリプトのパスを設定しましたが、
Transcriptのログは正常に吐き出されるものの、body.txtはWindows\system32にて実行されるようです。
何故body.txtだけはsystem32フォルダを参照するのでしょうか。========================================================
#実行パス取得
Set-Location (Split-Path ( & { $myInvocation.ScriptName } ) -parent)
$TranscriptPath = (".\sendMail.Log")
Start-Transcript $TranscriptPath -Append
$bodyPath = (".\body.txt")
$enc = [System.Text.Encoding]::GetEncoding("Shift-JIS")
$stream = new-object System.IO.StreamReader($bodyPath, $enc)
$body = $stream.ReadToEnd()
$body
$stream.Close()
回答
-
Set-LocationはPowerShell内部のカレントディレクトリを変更します。
[Environment]::CurrentDirectoryを確認するとわかりますが、OSは依然として元のパスを参照しています。OS側を変更するには[Environment]::CurrentDirectoryを設定することで変更できます。
# 同時に変更する手段はないものかしら?- 回答の候補に設定 牟田口大介Moderator 2015年1月27日 7:55
- 回答としてマーク UltraKatan 2015年1月29日 8:22
すべての返信
-
Set-LocationはPowerShell内部のカレントディレクトリを変更します。
[Environment]::CurrentDirectoryを確認するとわかりますが、OSは依然として元のパスを参照しています。OS側を変更するには[Environment]::CurrentDirectoryを設定することで変更できます。
# 同時に変更する手段はないものかしら?- 回答の候補に設定 牟田口大介Moderator 2015年1月27日 7:55
- 回答としてマーク UltraKatan 2015年1月29日 8:22