在Win32_Product
尝试查询以找到软件版本后,我无法理解为什么结果如此之慢。比查询Win32_service
或Win32_process
. 所以来到这里看看我是否遗漏了什么,我发现其他人报告了同样的问题,这篇文章解释了原因。
查找已安装软件的最常建议替代方法是查询一个或三个注册表项。这将是我的第一个解决方案,但我的公司尚未开始配置服务器以接受PSRemoting
。任何 reg 查询只会返回 Kerberos 身份验证错误。我可以PSRemoting
在单个服务器上启用,但我的团队支持 30K 系统。所以这个解决方案已经出来了。
最重要的是,我们正在将 Symantec Endpoint Protection 从 v. 11 升级到 v. 12,我想要一个简单的检查来查找服务器上安装的版本。除了Win32_Product
注册表查询之外,还有其他方法可以找到版本吗?
所以我正在使用 Compare-Object,它对于比较文件效果很好。但如果只是字符串呢?有没有办法找出字符串之间的差异?CompareTo() 擅长报告存在差异,但不报告差异是什么。例如:
PS:> $a = "PowerShell rocks"
PS:> $b = "Powershell rocks"
PS:> $a.CompareTo($b)
1
PS:> Compare-Object -ReferenceObject $a -DifferenceObject $b
PS:>
Run Code Online (Sandbox Code Playgroud)
什么也没有返回。
有什么方法可以让我了解字符串之间的实际差异,而不仅仅是存在差异?
因此,我最近了解到要用-replace删除大括号,我需要将它们括在方括号中。像这样:
$server = '{Server123}'
$server -replace '[{}]',''
Run Code Online (Sandbox Code Playgroud)
因此,我想知道如何去除方括号?
$server1 = '[Serverxyz]'
Run Code Online (Sandbox Code Playgroud)
我尝试使用正斜杠,反斜杠转义,使用更多的方括号,括号,花括号,将每个方括号放入变量中并替换变量。
我什么都没想。我找到了一些有关该过程的在线资源,但它们是用Javascript,C ++或PowerShell以外的方法完成的。
我无法修剪字符串末尾的某些字符.字符串通常如下所示:
C:\blah1\blah2
Run Code Online (Sandbox Code Playgroud)
但有时它看起来像:
C:\blah1\blah2.extra
Run Code Online (Sandbox Code Playgroud)
我需要提取字符串'blah2'.大多数情况下,使用substring命令很容易.但是在极少数情况下,当存在'.extra'部分时,我需要首先修剪该部分.
问题是,'.extra'总是以点开头,然后是各种长度的字母的各种组合.所以通配符是必要的.本质上,我需要编写脚本,"如果字符串包含一个点,则修剪点和后面的任何内容."
$string.replace(".*","")
不起作用.也没有$string.replace(".\*","")
.也没有$string.replace(".[A-Z]","")
.
此外,我无法从字符串的开头得到它.'blah1'未知且长度各异.我必须从字符串的末尾开始'blah2'.
我发誓我在这里错过了一些简单的东西......
这是一个获取磁盘信息的简单脚本:
function get-disks {
try { $disks = gwmi win32_logicaldisk -co $server}
catch { write "$server : Can't connect"}
}
get-disks
$disk.deviceid
Run Code Online (Sandbox Code Playgroud)
仅gwmi命令就完美无缺.单独的"$ disks = gwmi ..."命令完美无缺.try {...} catch {...}行单独运行完美.
但是只要我加载函数并调用'get-disks',我就不会收到任何错误,但是$ disks是空的.
powershell ×5
regex ×2
string ×2
compareto ×1
difference ×1
replace ×1
windows ×1
wmi-query ×1