我必须将 .cfg 文件复制到工作场所服务器上程序文件目录下的特定位置。
不幸的是,这不仅取决于操作系统(2003/2008/2012),而且还必须确定操作系统是 32 位还是 64 位,并在适用时复制到“程序文件(x86)”目录路径。
我的计划是在一台服务器上拥有文件的三个不同版本,并让脚本将相关版本复制到正确的位置(覆盖现有文件),但我对 vbscripting 的接触几乎为零,所以我挣扎大时代!
WMI 可能是最好的方法。假设脚本将在每个目标主机上运行,您可以执行以下操作:
srcFolder = "..."
Set sh = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set wmi = GetObject("winmgmts://./root/cimv2")
For Each os In wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem")
ver = Left(os.Version, 3)
Next
Select Case ver
Case "5.2" : src = fso.BuildPath(srcFolder, "w3003_foo.cfg")
Case "6.0" : src = fso.BuildPath(srcFolder, "w2008_foo.cfg")
Case "6.1" : src = fso.BuildPath(srcFolder, "w2008r2_foo.cfg")
Case "6.2" : src = fso.BuildPath(srcFolder, "w2012_foo.cfg")
Case Else : WScript.Echo "Unsupported OS version: " & ver
WScript.Quit
End Select
If sh.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" Then
dst = sh.ExpandEnvironmentStrings("%ProgramFiles(x86)%\some\foo.cfg")
Else
dst = sh.ExpandEnvironmentStrings("%ProgramFiles%\some\foo.cfg")
End If
fso.CopyFile src, dst
您可以通过 WMI(或从注册表)获得的操作系统版本。
For Each os In GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
ver = os.Version
Next
但是对于操作系统架构,我会建议下一个 - WMIWin32_Processor
或Shell.Environment
(更多胖子)。
ver = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth
If ver = 64 Then ...
ver = CreateObject("WScript.Shell").Environment("SYSTEM")("PROCESSOR_ARCHITECTURE")
If ver = "AMD64" Then ...