0

今日見た奇妙な問題がわかりません。スクリプトを 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
4

2 に答える 2

0

SYSTEM アカウントでジョブを実行している可能性があります。-Credentialパラメーターを使用して、アカウントの資格情報を提供します (コマンドを対話的に正常に実行したときにログインしているアカウントは何でも)。

ところで、Register-ScheduledJobはタスク スケジューラを使用します。タスク スケジューラでジョブのプロパティをチェックして、どのアカウントで実行するように構成されているかを確認できます。

于 2013-07-11T16:08:52.980 に答える