今日見た奇妙な問題がわかりません。スクリプトを ISE または Pshell で手動で実行する場合と、ジョブとして実行する場合に違いはありますか? 手動で実行すると、コードはエラーをスローしません-スムーズに実行されます:
Get-ChildItem "\\SERVER\S$\ROOT\DIR" -Recurse | Where {$_.creationtime -lt (Get-Date).AddDays(-35)} | Remove-Item -Force -Include *.conf
しかし、ジョブを介して実行し、$error を txtfile にエクスポートさせると、次のことが起こります。実行中のマシンの権限は、スケジュールされたジョブの権限とは異なりますか?
Get-ChildItem : Zugriff verweigert
In Zeile:81 Zeichen:1
+ Get-ChildItem "\\SERVER\S$\ROOT\DIR" -Recurse | Where
{$_.creati ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ChildItem], UnauthorizedA
ccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.Pow
erShell.Commands.GetChildItemCommand
Zugriff verweigert = アクセスが拒否されました
ああ、私の Windows の権利について話すのをすっかり忘れていました。通常、私が接続しているサーバーは、資格情報 ofc でのログインを除いて、全員に対してブロックされています。しかし、どういうわけか私の手動のpowershellスクリプトはファイルを削除および作成できますか? 「ジョブモード」では能力を失います。
編集: Test-Path コマンドレットと同じです。手動で、それは私に真か偽かを示します。ジョブを介してエラーがスローされます。
編集 - 同じ問題が完全に異なる コマンドレット:
$username = "Administrator"
$password = cat C:\securestring.txt | convertto-securestring
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
New-PSDrive -Name Z -PSProvider FileSystem -Root \\Server\ROOT -Credential $cred -Persist
test-path 'Z:'
Remove-PSDrive -Name Z -PSProvider FileSystem
これはうまくいきます!
これはしません:
$jobname = "Test5"
$JobTrigger = New-JobTrigger -Daily -At "00:18 PM"
$MyOptions = New-ScheduledJobOption -ContinueIfGoingOnBattery -HideInTaskScheduler -RunElevated
Register-ScheduledJob -name "$jobname" -scriptblock {
$username = "Administrator"
$password = cat C:\securestring.txt | convertto-securestring
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
New-PSDrive -Name Z -PSProvider FileSystem -Root \\Server\ROOT -Credential $cred -Persist
test-path 'Z:'
Remove-PSDrive -Name Z -PSProvider FileSystem
} -trigger $JobTrigger –ScheduledJobOption $MyOptions