我尝试将文件从我的电脑复制到远程电脑列表。我编写了这个 PowerShell 脚本,但在脚本运行时我收到了以下错误
“复制项目:拒绝访问”。
$Pclist = Get-Content "D:\pclist.txt"
$username = "adminuser"
$password = "pass"
$FileLocation = 'D:\location.exe'
$Destination = "d$\"
foreach ($_ in $Pclist)
{Copy-Item $FileLocation -Destination \\$_\$Destination -Recurse -PassThru}
答案1
在执行任何其他操作之前,请通过运行带有硬编码值的命令来确保您的语法没有出现问题:
Copy-Item 'D:\location.exe' -Destination \\Computer1\D$\ -Recurse -PassThru
如果没有看到完整的错误消息,我不确定您是否在本地计算机或远程计算机上被拒绝访问。
假设这是您的本地计算机,请提升您的提示(以管理员身份运行)。我通常在从“C”以外的驱动器提取时不会看到此问题,因此我不能 100% 确定这是您遇到的问题。
你可以发现您正在运行的帐户没有写入/访问远程机器的权限。看起来您已经开始在那里指定用户名和密码,但您实际上还没有使用它。
为了获取可以使用的凭证对象,请Copy-Item
考虑以下内容:
$username = "adminuser"
$password = "pass"
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, ($password | ConvertTo-SecureString -AsPlainText -Force)
请注意,这会使密码以纯文本形式保留在脚本中以供任何人查看,我个人更喜欢这样做:
$username = "adminuser"
$cred = Get-Credential $username
这将弹出一个 Windows 安全对话框,其中预先填充了用户名,并要求您输入密码。
然后您可以将它$cred
与其他命令一起使用,例如:
Copy-Item $FileLocation -Destination \\$_\$Destination -Credential $cred -Recurse -PassThru
我应该指出,这不会保护您的凭据。只要该 $cred 对象存在,就可以在计划文本 ( $cred.GetNetworkCredential().password
) 中从中提取密码。