none
タスクスケジューラ実行時にパスを取得できない RRS feed

  • 質問

  • メールを送信するスクリプトを作成しています。

    右クリックからの実行時は問題ありませんが、タスクスケジューラからの実行時には
    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()

    2015年1月19日 1:44

回答

  • Set-LocationはPowerShell内部のカレントディレクトリを変更します。

    [Environment]::CurrentDirectoryを確認するとわかりますが、OSは依然として元のパスを参照しています。OS側を変更するには[Environment]::CurrentDirectoryを設定することで変更できます。
    # 同時に変更する手段はないものかしら?

    2015年1月19日 2:08

すべての返信

  • Set-LocationはPowerShell内部のカレントディレクトリを変更します。

    [Environment]::CurrentDirectoryを確認するとわかりますが、OSは依然として元のパスを参照しています。OS側を変更するには[Environment]::CurrentDirectoryを設定することで変更できます。
    # 同時に変更する手段はないものかしら?

    2015年1月19日 2:08
  • タスクスケジューラに限って言えば、タスクスケジューラ登録時の設定で作業ディレクトリを指定すればいいかと思いますが。

    // 登録ウィザードの作業ディレクトリを指す項目名が「開始」とか言うのはわかりづらすぎると思う。

    2015年1月19日 2:22
  • こんばんは、

    すでにレスがついている通りだと思いますが、

    私はPowerShell内で完結するのが好みなので、.NETなどの外部に渡すパスは、

    Convert-Path .\body.txt

    などとして、絶対パスで渡しています。

    2015年1月19日 14:31