2017-02-28 91 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)特權(您提到的具有'域管理員訪問權限'的帳戶應該足夠)。 但請記住,建議始終使用權限盡可能小的帳戶)。