2017-02-28 100 views
-1

我已经写了一个脚本,并且我已经提出了一个条件,如果服务器正在寻找下面的文件并阅读文件内容。但它给错误像下面运行PowerShell脚本时访问被拒绝错误

if ((Test-Connection -ComputerName $fqdn -Count 1 -Quiet) -eq 1) 
{ 
    $Value = "Host is pinging" 

    $searchtext = "Imaging Completed" 
    $file = "\\$fqdn\C$\Image.log" 

    if (Test-Path $file) 
    { 
     if (Get-Content $file | Select-String $searchtext -quiet) 
     { 
      Write-Host "$fqdn Imaging Completed" 

错误:

Test-Path : Access is denied 
At C:\Windows\TEMP\hudson4530962683016292267.ps1:65 char:5 
+ if (Test-Path $file) 
+  ~~~~~~~~~~~~~~~ 
    + CategoryInfo   : PermissionDenied: (\\server1.us.o...\Image.log:String) [Test-Path], UnauthorizedAccessException 
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.TestPathCommand

任何人都可以纠正我这里来解决这个问题?

+1

用于执行脚本的帐户无权读取'\\ server1.us.o ... \ Image.log'处的文件。 –

+0

但我有权访问用户帐户的域管理员访问权限 – SNair

+8

看起来您正在Jenkins中运行此操作。使用哪个帐户?在你的脚本中添加一个“whoami”以确认。您可能需要为该用户而不是c $创建只读共享。 –

回答

0

正如其他意见已经指出,你必须使用有效的凭据才能够访问有问题的文件。

正如您所提到的,脚本的帐户名称是在服务中运行的(怀疑詹金斯)。如果您按照手册Install Jenkins as a Windows service查看服务配置,您可能会发现该服务实际运行为LocalSystem,这将解释观察到的用户名。这也将匹配与手动截图在使用相同的帐户:

Install Jenkins as a Windows service

为了纠正这种情况,您可以选择配置该服务根据不同的帐户有足够的运行(特别是NetworkAccess)特权(您提到的具有'域管理员访问权限'的帐户应该足够)。 但请记住,建议始终使用权限尽可能小的帐户)。