使用Invoke-Command在PSSession中运行Powershell脚本

问题描述 投票:1回答:1

因此,我有一个“父”脚本,该脚本对某些Web服务器执行了一个invoke-命令,在该invoke-command的内部,我有一个“ Child”脚本,该脚本正在删除和复制一些文件。

这是父级脚本:(注意:$ cred变量现在是通过securestring经过验证且可以正常运行的域管理员)

foreach ($server in $servers) {
    invoke-command -ComputerName $server -Credential $cred -ScriptBlock {
    & 'D:\Web\Deploy_CopyStaging2AppPools.ps1'
    }

出于任何原因,子脚本似乎都出现权限错误(我认为?)

子脚本看起来像这样

$AppPoolDirs = @(
"SisterSitesCategory",
"SisterSitesManufacturer",
"TestimStopTrunk",
"1ss_bot2",
"1ss_test",
"1sspro",
"Canadabot2",
"DevelopBot2",
"hcbot2",
"LDEBOT2",
"LnBOT2"
)
#timestamp filter
filter timestamp {"$(Get-Date -Format o): $_"}
Write-Output "Starting AppPool Filecopies on $env:COMPUTERNAME" | Timestamp | Out-File -FilePath "D:\Web\Deploylog.txt" -Append

Foreach ($AppPoolDir in $AppPoolDirs) {
    Write-Output "The working AppPoolDirectory is $AppPoolDir"
    if
    (test-path D:\Web\AppPools\$AppPoolDir) {
        Write-Output "######APP POOL DIRECTORY FOUND#######! Gonna do stuff to the AppPoolDir $AppPoolDir"
        remove-item -path "D:\Web\AppPools\$AppPoolDir\bin\App_Web_*.dll" -WhatIf
        copy-item -path "\\1sl-den-web01\d$\web\staginglive\staging\*" -Destination "D:\Web\AppPools\$AppPoolDir" -recurse -Force -WhatIf
        }
    else {
        Write-Output "Directory $env:COMPUTERNAME D:\Web\AppPools\$AppPoolDir Doesn't exist, no removal or copying was done"
        }
    }

删除项目有效,复制项目无效。由于copy-item -path位于远程计算机上,因此我猜测这是权限问题。

[如果是权限的事情,我猜想“ Parent”脚本在使用适当凭据打开invoke-command时,不是在用适当凭据调用子脚本吗?

powershell copy credentials invoke-command copy-item
1个回答
0
投票

您需要在测试路径命令中用引号引起来的字符串

此外,我认为您应该使用Write-Host而不是Write-Output。后者写入管道,这似乎不是这里的意图。

鉴于您似乎没有使用任何类型的自定义端点,我不认为调用在不同的条件下调用本地脚本。

让我知道怎么回事。

© www.soinside.com 2019 - 2024. All rights reserved.