0

我正在编写一个在另一台服务器上使用 get-childitem 的脚本,但需要对其进行更改,以便它使用另一台服务器上本地帐户的凭据来执行此操作。当我只是使用 Active Directory 来执行此操作时,我正在使用我的 AD 登录名将任务保存在我们的调度程序中,并且使用 UNC 路径在另一台服务器上很好。但是我们最近决定将其更改为本地登录,我收到一条错误消息,尝试使用 net use。有谁知道用 UNC 路径来做这件事的好方法?或者,知道为什么以下内容会给出错误消息吗?

function GetSecureLogin(){
   $global:username = "stuff"
   $global:password = get-content C:\filename.txt | convertto-securestring
}

function Cleanup([string]$Drive) {
   try {
      $deleteTime = -42
      $now = Get-Date
      **#this is saying cannot find path '\\name.na.xxx.net\20xServerBackup\V' name truncated**
      Get-ChildItem -Path $Drive -Recurse -Force |Where-Object {$_.LastWriteTime -lt $limit} | Remove-Item -Force 
   }
   Catch{
      Write-Host "Failed"
   }
}

#####################start of script####################
$share = '\\name.na.xxx.net\20xServerBackup\'
$TheDrive = '\\name.na.xxx.net\20xServerBackup\VMs\'

$global:password = ""
$global:username = ""
GetSecureLogin

net use $share $global:password /USER:$global:username

[array]$DriveArray = @(TheDrive)

try{
   $i=0
   for ($i = $DriveArray.GetLowerBound(0); $i -le $DriveArray.GetUpperBound(); $i++) {
      $tempDrv = $DriveArray[$i]
      Cleanup $tempDrv
   }
}
catch [Exception] {
   Write-Host $_.Exception.Message
}

如您所见,我开始在此链接上使用 net use 的示例,但使用凭据访问其他服务器并没有起到作用。powershell unc路径信用

4

1 回答 1

4

我让它以这种方式工作,正如上面@robert.westerlund 所建议的那样,使用 New-PSDrive:

$DestPath = split-path "$Drive" -Parent #this gives format without slash at and and makes powerShell *very happy*
New-PSDrive -Name target -PSProvider FileSystem -Credential $global:cred -Root "$DestPath" | Out-Null
$temp1 = Get-ChildItem -Path target:\VMs\  -Recurse -Force | Where-Object { $_.LastWriteTime -lt $limit} 
Get-ChildItem -Path $Drive -Recurse -Force | Where-Object { $_.LastWriteTime -lt $limit} | Remove-Item -Force
Remove-PSDrive target

我也必须像这样添加 cred 部分:

$global:cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $global:username, $global:password
于 2014-03-24T16:03:20.547 回答