带有凭据的Powershell UNC路径



背景:我们创建了一个脚本,观察文件的时间戳,当它在hotfolder中检测到一个持续时间超过10分钟的文件时,脚本会自动重新启动服务。

这实际上是powershell正在运行的powershell脚本:

#Variablen ausfüllen
$watchfolder = '\dcsrvpublicScanner-Eingang'#UNC Pfade funktionieren
$CurTimeStamp = Get-Date
$FileAge = 10 #in Minuten
#Er prüft die Zeit der Dokumente
$Files = Get-ChildItem -Path $watchfolder  | Where-Object{($_.LastWriteTime -le 
$CurTimeStamp.AddMinutes(-1 * $FileAge))}
#Für jedes Dokument
ForEach ($File in $Files) {
Write-Host " " $File " - " $File.LastWriteTime
## Damit wir der Dienst neugestartet
Restart-Service -Name Spooler
## Sobald er eine Datei gefunden hat stopt er
break
}

该服务正在域外的服务器上运行,需要访问热文件夹。热文件夹位于具有其他凭据的域控制器上。现在我需要在我的powershell脚本中使用正确的凭据进行连接,我尝试过的一些示例可以在这里看到:

#Variablen ausfüllen
$watchfolder = '\dcsrvpublicScanner-Eingang'#UNC Pfade funktionieren
$CurTimeStamp = Get-Date
$username = 'user'
$password = '1234'
$FileAge = 10 #in Minuten
#Er prüft die Zeit der Dokumente
$Files = Get-ChildItem -Path $watchfolder $username $password | Where-Object{($_.LastWriteTime -le 
$CurTimeStamp.AddMinutes(-1 * $FileAge))}
#Für jedes Dokument
ForEach ($File in $Files) {
Write-Host " " $File " - " $File.LastWriteTime
## Damit wir der Dienst neugestartet
Restart-Service -Name Spooler
## Sobald er eine Datei gefunden hat stopt er
break
}

不起作用,然后我尝试了其他东西

#Variablen ausfüllen
$watchfolder = '\dcsrvpublicScanner-Eingang'#UNC Pfade funktionieren
$CurTimeStamp = Get-Date
$FileAge = 10 #in Minuten
#Er prüft die Zeit der Dokumente
$Files = Get-ChildItem -Path $watchfolder /user:user password:1234 | Where-Object{($_.LastWriteTime - 
le $CurTimeStamp.AddMinutes(-1 * $FileAge))}
#Für jedes Dokument
ForEach ($File in $Files) {
Write-Host " " $File " - " $File.LastWriteTime
## Damit wir der Dienst neugestartet
Restart-Service -Name Spooler
## Sobald er eine Datei gefunden hat stopt er
break
}

也没有成功

现在我希望有人能帮助我。

谢谢!

我认为主要的问题是如何向远程域进行身份验证,以便监视文件共享。Get-ChildItem没有-credential参数。

您可以先尝试创建映射的驱动器或路径,但您需要建立一个凭据对象来与New-PSDrive命令一起使用。

$Pwd  = ConvertTo-SecureString -String "password" -AsPlainText -Force
$Cred = [System.Management.Automation.PSCredential]::New('UserName', $pwd)
New-PSDrive -Root '\dcsrvpublicScanner-Eingang' -PSProvider FileSystem -Name "ShareToMonitor" -Credential $Cred
...

注意对于Powershell 4.0,更改:

$Cred = [System.Management.Automation.PSCredential]::New('UserName', $pwd)

至:

$Cred = New-Object System.Management.Automation.PsCredential('UserName',$Pwd)

您可以在此处阅读有关新PSDrive的信息。

然而,直接在脚本中写入密码通常是个坏主意。您可以将其安全地存储在文件中

互联网上有很多指南和/或博客文章可以帮助你做到这一点。这是谷歌的第一个结果。一旦你建立了安全文件,你就必须向脚本中添加代码来检索它。然后用它来创建凭据对象,如上所述。

注意:该文件只能在计算机上以及创建该文件的帐户下进行解码。

最新更新