【问题标题】:Access denied error while running PowerShell script运行 PowerShell 脚本时访问被拒绝错误
【发布时间】:2017-02-28 06:11:03
【问题描述】:

我已经编写了一个脚本,并且我设置了一个条件,即如果服务器正在搜索下面的文件并读取文件内容。但它给出的错误如下所示

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 : 访问被拒绝
在 C:\Windows\TEMP\hudson4530962683016292267.ps1:65 char:5
+ if (测试路径 $file)
+~~~~~~~~~~~~~~~
    + CategoryInfo : PermissionDenied: (\\server1.us.o...\Image.log:String) [Test-Path], UnauthorizedAccessException
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.TestPathCommand

谁能在这里纠正我来解决这个问题?

【问题讨论】:

  • 执行脚本的账号没有\\server1.us.o...\Image.log文件的读取权限。
  • 但我可以访问域管理员访问用户帐户
  • 看起来你正在 Jenkins 中运行它。那是用什么账号?在你的脚本中添加一个“whoami”来确定。您可能需要为该用户创建一个只读共享而不是 c$。
  • 它说 nt authority\system!!!我不确定这个帐户 t 是如何用于运行脚本的
  • 将有效凭据添加到您的Test-Connection

标签: powershell jenkins


【解决方案1】:

正如其他 cmets 已经指出的那样,您必须使用有效的凭据才能访问相关文件。

如您所述,脚本的帐户名称是在服务下运行的(怀疑是 Jenkins)。如果您遵循手册Install Jenkins as a Windows service 并查看您的服务配置,您可能会发现该服务实际上以LocalSystem 运行,这将解释观察到的用户名。这也将与使用相同帐户的手册中的屏幕截图相匹配:

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

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 2016-06-21
    • 2020-07-16
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2017-04-06
    • 2017-09-15
    相关资源
    最近更新 更多