运行 来自 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 调用了测试路径脚本,使用了我以前手动 运行 脚本的同一用户
场景一
运行 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计算机名:本地主机
错
- 场景二
运行 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/
非常感谢!
我正在尝试 运行 来自 运行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 调用了测试路径脚本,使用了我以前手动 运行 脚本的同一用户
场景一 运行 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计算机名:本地主机
错
- 场景二 运行 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
我使用 powershell 中的会话配置来解决这个问题。通过这种方式,您可以将凭据绑定到 PowerShell 会话配置,并为所有未来连接重用此配置。
https://4sysops.com/archives/solve-the-powershell-multi-hop-problem-without-using-credssp/
非常感谢!