情報を収集し、現在のコンピュータのXMLファイルに保存するpowershellスクリプトを作成しました。 XMLをローカルサーバーに直接保存する方が良いと考えていました。 Q:XMLファイルをサーバーに保存するにはどうすればよいですか? - これは私がスクリプトと同じディレクトリに保存する方法です: $ scriptpath =分割パス - 親$ myinvocation.MyCommand.Definition $ template | out-File $ ScriptPath \ tempXML.xmlサーバからのリモーティングpowershell
Q:スクリプトをローカルサーバーから実行して、そこに直接XMLを保存することはできますか?
これは私のスクリプトです:
<#
FORMAT:
- All variabel names are lowercase
- All tags in XML are lowercase
Some commands are run and placed directly into the XML (Commands before XML is made).
Some commands are run after the XML is made and then adds children to specified nodes in the XML.
#>
#Saves the scriptpath to ScriptPath variable(HELPER)
$scriptpath = Split-Path -parent $myinvocation.MyCommand.Definition
#Saves computername to compname variable(HELPER)
$compname = gc env:computername
#Username
$brukernavn = gc env:username
#PC Serial Number
$serialnr = gwmi -computer $compname Win32_BIOS | ForEach {$_.SerialNumber}
#System Info
gwmi -computer $compname Win32_ComputerSystem | ForEach {$siname = $_.Name; $simanufacturer = $_.Manufacturer; $simodel = $_.Model}
#Graphic card
gwmi "win32_VideoController" | ForEach-Object {$gpuname = $_.Name}
#Processor Info
gwmi -computer $compname Win32_Processor | ForEach-Object {$cpuname = $_.Name; $cpumanufacturer = $_.Manufacturer; $cpucores = $_.NumberOfCores; $cpuaddresswidth = $_.AddressWidth}
#Memory
$totalmem = 0
$memsticks = gwmi -Class win32_physicalmemory
foreach ($stick in $memsticks) { $totalmem += $stick.capacity }
$totalmem = [String]$($totalmem/1gb) + " GB"
#Install time for windows OS
$utctime = get-wmiobject win32_OperatingSystem | select-object -expandproperty installDate
$installtime = [System.Management.ManagementDateTimeConverter]::ToDateTime($utctime);
#--------#
#XML-form
#--------#
$template = "<computer version='1.0'>
<hardware>
<serialnumber>$serialnr</serialnumber>
<systeminfo>
<name>$siname</name>
<manufacturer>$simanufacturer</manufacturer>
<model>$simodel</model>
</systeminfo>
<drive>
<name></name>
<volumename></volumename>
<size></size>
</drive>
<memory>
<size>$totalmem</size>
</memory>
<gpu>
<name>$gpuname</name>
</gpu>
<cpu>
<name>$cpuname</name>
<manufacturer>$cpumanufacturer</manufacturer>
<id>cpuid</id>
<numberofcores>$cpucores</numberofcores>
<addresswidth>$cpuaddresswidth</addresswidth>
</cpu>
</hardware>
<software>
<user>
<name>$brukernavn</name>
</user>
<osinfo>
<caption></caption>
<serialnumber></serialnumber>
<installdate>$installtime</installdate>
<servicepack></servicepack>
</osinfo>
</software>
</computer>"
$template | out-File $ScriptPath\tempXML.xml
$systemroot = [System.Environment]::SystemDirectory
$xml = New-Object xml
$xml.Load("$ScriptPath\tempXML.xml")
#Drive, hardware
$newdrive = (@($xml.computer.hardware.drive)[0])
Get-WmiObject -Class Win32_logicaldisk |
ForEach-Object {
$newdrive = $newdrive.clone()
$newdrive.name = [string]$_.name
$newdrive.volumename = [string]$_.volumename
$newdrive.size = "{0:N2}" -f ($_.size/1Gb) + " GB"
$xml.computer.hardware.AppendChild($newdrive) > $null
}
$xml.computer.hardware.drive | where-object {$_.size -eq "0,00 GB" -or $_.volumename -eq ""} | foreach-object {$xml.computer.hardware.RemoveChild($_)}
#Memory Info, hardware
$newmemory = (@($xml.computer.hardware.memory)[0])
Get-WmiObject -Class WIN32_PhysicalMemory |
ForEach-Object {
$newmemory = $newmemory.clone()
$newmemory.PositionInRow = [string]$_.PositionInRow
$newmemory.datawidth = [string]$_.datawidth
$newmemory.size = [String]$($_.capacity/1gb) + " GB"
$newmemory.devicelocator = $_.devicelocator
$xml.computer.hardware.AppendChild($newmemory) > $null
}
$xml.computer.hardware.memory | where-object {$_.size -eq ""} | foreach-object {$xml.computer.hardware.RemoveChild($_)}
#OSInfo, software
$newosinfo = (@($xml.computer.software.osinfo)[0])
Get-WmiObject -computer $compname Win32_OperatingSystem |
ForEach-Object {
$newosinfo = $newosinfo.clone()
[String] $bitversion = gwmi Win32_OperatingSystem osarchitecture;
$newosinfo.caption = [String]$_.caption
$newosinfo.serialnumber = [string]$_.serialnumber + " " + $bitversion
$newosinfo.servicepack = $_.csdversion
$xml.computer.software.AppendChild($newosinfo) > $null
}
$xml.computer.software.osinfo | where-object {$_.caption -eq ""} | foreach-object {$xml.computer.software.RemoveChild($_)}
#-------Save content----------------
$xml.Save("$ScriptPath\tempXML.xml")
#-----------------------------------
あなたは-computernameのPARAMが欠落している呼び出します。値は、常にスクリプトが実行されるローカルコンピュータのものです。 –