-1

職場のサーバーのプログラム ファイル ディレクトリの下の特定の場所に .cfg ファイルをコピーする必要があります。

残念ながら、これは OS に依存するだけでなく (2003/2008/2012)、OS が 32 ビットか 64 ビットかを判断し、該当する場合は「Program Files (x86)」ディレクトリ パスにコピーする必要があります。

私の計画は、ファイルの 3 つの異なるバージョンを 1 つのサーバーに配置し、スクリプトに関連するバージョンを適切な場所にコピーさせることです (既存のファイルを上書きします)。大苦戦!

4

2 に答える 2

2

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
于 2013-02-13T13:29:56.507 に答える
1

WMI で (またはレジストリから) 取得できる OS バージョン。

For Each os In GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
    ver = os.Version
Next

しかし、OSアーキテクチャについては、次のいずれかをお勧めします-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 ...
于 2013-02-15T05:27:19.100 に答える