运行 来自 rundeck(linux) 的 powershell 显示不同的结果

Running a powershell from rundeck(linux) display different result

我正在尝试 运行 来自 运行deck(linux) 的 powershell 脚本,如果我 运行 本地脚本[从多个终端删除一些文件servers](Windows server) 它按预期工作,但是如果我从 运行deck server(已配置 winrm)调用它,脚本似乎无法访问我尝试访问的远程文件夹。

我尝试 运行使用相同的用户运行脚本,但仍然显示不同的结果。

脚本如下:

$userAD = "someuser"
$servers = Get-Content C:\TSList.csv
$Folder = "c$\Users$userAD\"
$TSFolderShare = "\sharepath"

Write-Output "#####Start of script#####"
Write-output `n
Write-output "Checking if $userAD user profile exist in Terminal servers..."

sleep -seconds 1

foreach ($server in $servers) {

Test-Path "\$server$Folder" -PathType Any
Get-ChildItem "\$server$Folder" 

    if (Test-Path "\$server$Folder" -PathType Any) {
        Write-output  "Resetting user profile in $server.."
                   Get-ChildItem "\$server$Folder" -Recurse -Force -ErrorAction SilentlyContinue  | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue 
        
        sleep -seconds 1
        Write-output "Done." 

        if( (Get-ChildItem "\$server$Folder" | Measure-Object).Count -eq 0)
             {
                Write-output "Done." 
             }
        
    }
    else
    {
        Write-output  "Resetting user profile in $server.."
        sleep -seconds 1
        Write-output  "User profile does not exist in $server."          
        #Write-output "\$server$Folder does not exist in $server!" -ForegroundColor Red
    }

}

编辑:看来我的问题是 运行使用 RunAS 从另一个脚本中调用我的脚本。

下面我尝试使用 ps 脚本从另一台服务器访问文件夹,但由于我想将其集成到 Rundeck,我需要从我的 [=76] 调用我的 ps 脚本=] 服务器使用 python。我直接 运行 测试了 ps 脚本,并使用另一个脚本和 RunUs 调用了测试路径脚本,使用了我以前手动 运行 脚本的同一用户

  1. 场景一 运行 PS 脚本通过单独的 PS 脚本与 RunAS(my_account)

    $用户名 = "my_account" $密码 = "my_password" $secstr = 新对象 -TypeName System.Security.SecureString $password.ToCharArray() | ForEach 对象 {$secstr.AppendChar($_)} $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr

    Invoke-Command -FilePath "C:\testpath.ps1" -Credential $cred -Computer localhost

(C:\testpath.ps1) 内容如下:

Test-Path "\server\c$\Users\myaccount\"

结果:

访问被拒绝 + CategoryInfo : PermissionDenied: (\server\c$\Users\myaccount:String) [测试路径], UnauthorizedAccessException + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.TestPathCommand + PS计算机名:本地主机

  1. 场景二 运行 C:\testpath.ps1直接为my_account

Test-Path "\server\c$\Users\myaccount\"

结果: 真

您遇到了 Rundeck 和 Powershell 的 double-hop 问题,here the explanation. That's asked before, take a look a , and here a good workaround. Also 可以解决它。

我使用 powershell 中的会话配置来解决这个问题。通过这种方式,您可以将凭据绑定到 PowerShell 会话配置,并为所有未来连接重用此配置。

https://4sysops.com/archives/solve-the-powershell-multi-hop-problem-without-using-credssp/

非常感谢!