因此,我有一个“父”脚本,该脚本对某些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时,不是在用适当凭据调用子脚本吗?
您需要在测试路径命令中用引号引起来的字符串
此外,我认为您应该使用Write-Host而不是Write-Output。后者写入管道,这似乎不是这里的意图。
鉴于您似乎没有使用任何类型的自定义端点,我不认为调用在不同的条件下调用本地脚本。
让我知道怎么回事。