背景:我们创建了一个脚本,观察文件的时间戳,当它在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的信息。
然而,直接在脚本中写入密码通常是个坏主意。您可以将其安全地存储在文件中
互联网上有很多指南和/或博客文章可以帮助你做到这一点。这是谷歌的第一个结果。一旦你建立了安全文件,你就必须向脚本中添加代码来检索它。然后用它来创建凭据对象,如上所述。
注意:该文件只能在计算机上以及创建该文件的帐户下进行解码。