0

我今天看到的奇怪问题,我不明白。在 ISE 或 Pshell 中手动运行脚本和作为作业是否有区别?如果我手动运行它,代码不会抛出错误 - 运行顺利:

Get-ChildItem "\\SERVER\S$\ROOT\DIR" -Recurse | Where {$_.creationtime -lt (Get-Date).AddDays(-35)} | Remove-Item -Force -Include *.conf

但是,如果我通过 Job 运行它并让它将 $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 = 拒绝访问

哦,完全忘了告诉我我的窗户权利。通常,我要连接的服务器对所有人都被阻止 - 除了使用 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 回答
0

好吧,这并不完全是我最初问题的答案,但我能够通过使用调用命令和测试路径从那里解决我的问题,并通过 -arg 给出参数。

Invoke-Command -ComputerName $FTPADRESS -ArgumentList $DIRECTORY -ScriptBlock {param ($DIR)
                    $check = Test-Path -Path "\\SERVER\ROOT\$DIR"
                    if ($check -ne $true) {New-Item -ItemType directory -Path "\\SERVER\ROOT\$DIR"}
                                                                              }

同样适用于 get-childitem。

于 2013-07-17T14:34:28.167 回答