我试图在一堆远程计算机中找到一个注册表项值。并将值写回我的PC中的共享文件夹。但是,当我指定要写入我的PC中的共享文件夹的输出时,我得到访问被拒绝错误。我作为管理员运行PowerShell。
$computers = Get-Content "C:\Temp\AutoSug\Computers.txt"
$output_path = "\\mycomputername\powershell\output.csv"
$setscript =
{
param($output_path)
$hostname = (Get-CIMInstance CIM_ComputerSystem).Name
$objExcel = New-Object -ComObject Excel.Application
if ($objExcel.Version -eq "12.0")
{
$HKEY_USERS = Get-ChildItem REGISTRY::HKEY_USERS | where-object { ($_.Name -like "*S-1-5-21*") -and ($_.Name -notlike "*_Classes") }
$Users = @()
$value = @()
foreach ($User in $HKEY_USERS)
{
$PROFILESID = Get-ChildItem REGISTRY::"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" | Where-Object { $_.name -like "*" + $USER.PSChildName + "*" }
$SID = $PROFILESID.PSChildName
foreach ($value in $SID)
{
$key = Get-Item REGISTRY::HKEY_USERS\$VALUE\Software\Microsoft\Office\12.0\Outlook\Preferences -ErrorAction SilentlyContinue
$gold = $key.property
if($gold -like 'ShowAutoSug')
{
$grail = (Get-ItemProperty REGISTRY::HKEY_USERS\$VALUE\Software\Microsoft\Office\12.0\Outlook\Preferences).ShowAutoSug
$objSID = New-Object System.Security.Principal.SecurityIdentifier($value)
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
$hostname, $objUser, $value , $grail | Add-Content $output_path
}
else
{
$objSID = New-Object System.Security.Principal.SecurityIdentifier($value)
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
$hostname,$objUser, $value , "The Auto Complete is not disabled" | Add-Content $output_path
}
}
}
}
}
foreach($computer in $computers)
{
Invoke-Command -ComputerName $computer -ScriptBlock $setscript -ArgumentList $output_path
}
确切的错误讯息:
Access to the path '\\mycomputername\powershell\output.csv' is denied. FullyQualifiedErrorId : GetContentWriterUnauthorizedAccessError,Microsoft.PowerShell.Commands.AddContentCommand
答案 0 :(得分:1)
问题在于你正在做第二跳"当您尝试将输出写入共享文件夹时,这需要将凭据委派给目标计算机。 您需要在localhost和远程计算机上使用命令Enable-WSManCredSSP启用CredSSP。 然后,您必须在invoke-command中使用CreddSSP。
Invoke-Command -ComputerName $computer -ScriptBlock $setscript
-ArgumentList $output_path -Authentication Credssp -Credential (Get-Credential)
答案 1 :(得分:0)
当我与远程计算机交互时,我通常使用c $的完整路径。不知道它是否适用于您的情况。所以:
"\\mycomputername\c$\powershell\output.csv"