我有一个Powershell脚本来检测网络服务器上需要用户/密码才能访问它的磁盘空间。
获取此代码:
$password = get-content C:\creds.txt | convertto-securestring
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "username",$password
Get-WmiObject -ErrorAction Stop Win32_LogicalDisk -ComputerName $deviceName -credential $cred -Filter "DeviceID='$darg'"
$deviceName
和$darg
已经正确定义。
手动运行Powershell脚本时,这很好用。但是,当我将其设置为Windows计划任务时,它认为用户/通行证不正确:
Get-WmiObject:访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESS 拒绝))
$ disks = Get-WmiObject<<<< -ErrorAction Stop Win32_LogicalDisk -ComputerName $ deviceName -credential $ cred -Filter “的DeviceID = '$ DARG'” + CategoryInfo:未指定:(:) [Get-WmiObject],未经授权的AccessException + FullyQualifiedErrorId:System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
这是为什么? (该帐户是远程服务器上的本地用户。我已尝试在Schedule接口上输入凭据,但它不允许我保存,说无效登录;可能是因为是本地帐户)ServerName\LocalUser
在Windows Schedule UI中不起作用,仍然会出现错误的登录错误。
答案 0 :(得分:1)
为什么不将任务设置为在用户帐户下运行并运行没有凭据的wmi请求?
答案 1 :(得分:1)
这是我的评论,作为答案重新措辞。
convertto / from-securestring函数基于每个用户工作(如果您不提供特定的键值)。 IOW,一个用户无法读取其他用户的数据。
This pre-existing SO question似乎相关。 There is also relevant discussion在Powershellcommunity.org。