![如何使用 powershell 检查服务器上用户配置文件的位置?](https://linux22.com/image/603969/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20powershell%20%E6%A3%80%E6%9F%A5%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%94%A8%E6%88%B7%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E4%BD%8D%E7%BD%AE%EF%BC%9F.png)
是否可以使用 powershell 和正则表达式查找不在特定服务器/文件夹中的所有用户配置文件?如果可以,该怎么做?
答案1
在 powershell 中,使用 Win32_UserProfile WMI 对象远程查找配置文件:
gwmi -ComputerName <computername> Win32_UserProfile
要查找不在服务器上的用户配置文件(或位于服务器上的用户配置文件),您可以执行以下操作:
gwmi -ComputerName <computername> Win32_UserProfile | ? {"C:\Users\<username>" -contains $_.LocalPath}
如果路径存在,则会产生结果,如果不存在,则不会产生结果。您可以做比这更花哨的事情,但基本上这应该可以实现您的需要,而无需使用正则表达式。
答案2
对于当前用户运行:
$env:USERPROFILE
要获取所有环境变量的列表,请运行:
Get-ChildItem Env:
答案3
有趣的是,我今天必须这样做。试试这个脚本,用适当的值替换servername
、sharename
和c:\path\to\save.csv
。我凭记忆输入了这些,所以我不能保证没有错误 :(
$a = [adsisearcher]'(&(objectclass=user)(objectcategory=user)(profilepath=*))'
[void]$a.propertiestoload.add('name')
[void]$a.propertiestoload.add('profilepath')
$a.pagesize = 1000
$a.findall() | foreach-object {
if($_.properties.profilepath[0] -notmatch '^\\\\servername\\sharename\\')
{
$op = '' | select name,profilepath
$op.name = $_.properties.name[0]
$op.profilepath = $_.properties.profilepath[0]
$op
}
} | export-csv -NoTypeInformation c:\path\to\save.csv
答案4
如果将不匹配条件作为 LDAP 查询的一部分,效率会更高,
请尝试:
$a = [adsisearcher]'(&(objectclass=user)(objectcategory=user)(!profilepath=\\\\servername\sharename*))'