从远程 PC 获取系统信息并将其写入本地文件 (Powershell)
Get system information off a remote PC and write it to a local file (Powershell)
所以我正在尝试编写一个脚本,从网络上的计算机收集系统信息,然后将收集到的信息写入我的 C:\ 驱动器中的 HTML 文件。这是我目前所拥有的。
Invoke-Command -computername WIN-I9EKPIP774N -credential Administrator -ScriptBlock {
$OS= (Get-WmiObject -class Win32_OperatingSystem).Caption;
$PK= powershell "(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey";
$MN= (Get-WmiObject -Class:Win32_ComputerSystem).Manufacturer;
$SN= Get-WmiObject win32_bios | Select SerialNumber;
$CPU= Get-WMIObject win32_Processor | select name;
$RAM= (systeminfo | Select-String 'Total Physical Memory:').ToString().Split(':')[1].Trim();
$GPU= Get-WmiObject win32_VideoController|select videoProcessor; Write-host "GPU: "
$Result= $GPU, $OS, $PK, $SN, $CPU, $RAM
$Result|out-file C:/SYSINFO.HTML -computername DESKTOP-TA132FJ}
该命令可以很好地收集远程计算机上的信息,但我无法将其发回以将信息写入我的本地文件。我分别通过 IP 和主机名将机器添加到 trustedhosts,但仍然无法让它连接回我的本地机器并写入文件。任何帮助将不胜感激。
目前你有这样的东西:
Invoke-Command -computername blah -ScriptBlock { (do stuff) | out-file targetfile.txt }
因为out-file
在脚本块中,它是在远程计算机上执行的。最简单的解决方法是将其移动到脚本块之外,因此它更像是:
Invoke-Command -computername blah -ScriptBlock { (do stuff) } | out-file targetfile.txt
这样,输出将通过本地计算机上的 out-file
进行管道传输,您无需尝试反向计算权限。
你可以把它想象成你放在脚本块旁边的所有东西,都会在远程计算机上发生,任何外来者都会 运行 在你的本地计算机上。
考虑到这一点,如果您在 SB 中写入文件,它将写入远程磁盘。 PS 的另一个特征是事物(在本例中为 Invoke-Command)几乎总是 returns 事物,因此如果您删除 $Result
之后的所有内容,包括 |
,数组$Result
将被退回。
这样你就可以把它变成一个变量,然后写入文件。
$Computer = "WIN-I9EKPIP774N"
$stuff = @{ win32_operatingsystem = "Version"
SoftwareLicensingService = "OA3xOriginalProductKey"
win32_ComputerSystem = "Manufacturer"
win32_bios = "SerialNumber"
win32_Processor = "Name"
Win32_PhysicalMemory = "Capacity"
win32_VideoController = "videoProcessor"
}
$SysInfo = [pscustomobject]::new()
$stuff.Keys | foreach { $SysInfo | Add-Member -MemberType NoteProperty -Name $_ -Value ( Get-CimInstance -ClassName $_ -ComputerName $Computer )."$( $stuff.$_ )" }
$SysInfo | Out-File C:\SYSINFO.HTML
编辑
我意识到我在我的代码建议中犯了一些错误,所以重写和修改它以使其更易于处理。
$stuff
包含您想从中获取信息的 class 和 class 中的 属性。
如果有多个存储卡,RAM 将是每个存储卡的容量列表。
事实证明,如果您创建一个变量并将调用命令存储在该变量中,然后将该变量通过管道传输到输出文件,您就会得到结果。此外,我没有使用计算机名称,而是通过 IP 地址将系统添加到受信任的主机文件中。生成的代码如下所示。
$OVERALL= Invoke-Command -computername 172.16.50.50 -credential Administrator -ScriptBlock {
$OS= (Get-WmiObject -class Win32_OperatingSystem).Caption;
$PK= powershell "(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey";
$MN= (Get-WmiObject -Class:Win32_ComputerSystem).Manufacturer;
$SN= Get-WmiObject win32_bios | Select SerialNumber;
$CPU= Get-WMIObject win32_Processor | select name;
$RAM= (systeminfo | Select-String 'Total Physical Memory:').ToString().Split(':')[1].Trim();
$GPU= Get-WmiObject win32_VideoController|select videoProcessor;
$Result= $GPU, $OS, $PK, $SN, $CPU, $RAM;
$Result};
$OVERALL| Out-file C:\SYSINFO.HTML
这成功地从本地主机向远程机器发送了对 sys 信息的请求,并将远程主机的 sys 信息写入了本地主机上的 html 文件。超酷的学习体验!
所以我正在尝试编写一个脚本,从网络上的计算机收集系统信息,然后将收集到的信息写入我的 C:\ 驱动器中的 HTML 文件。这是我目前所拥有的。
Invoke-Command -computername WIN-I9EKPIP774N -credential Administrator -ScriptBlock {
$OS= (Get-WmiObject -class Win32_OperatingSystem).Caption;
$PK= powershell "(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey";
$MN= (Get-WmiObject -Class:Win32_ComputerSystem).Manufacturer;
$SN= Get-WmiObject win32_bios | Select SerialNumber;
$CPU= Get-WMIObject win32_Processor | select name;
$RAM= (systeminfo | Select-String 'Total Physical Memory:').ToString().Split(':')[1].Trim();
$GPU= Get-WmiObject win32_VideoController|select videoProcessor; Write-host "GPU: "
$Result= $GPU, $OS, $PK, $SN, $CPU, $RAM
$Result|out-file C:/SYSINFO.HTML -computername DESKTOP-TA132FJ}
该命令可以很好地收集远程计算机上的信息,但我无法将其发回以将信息写入我的本地文件。我分别通过 IP 和主机名将机器添加到 trustedhosts,但仍然无法让它连接回我的本地机器并写入文件。任何帮助将不胜感激。
目前你有这样的东西:
Invoke-Command -computername blah -ScriptBlock { (do stuff) | out-file targetfile.txt }
因为out-file
在脚本块中,它是在远程计算机上执行的。最简单的解决方法是将其移动到脚本块之外,因此它更像是:
Invoke-Command -computername blah -ScriptBlock { (do stuff) } | out-file targetfile.txt
这样,输出将通过本地计算机上的 out-file
进行管道传输,您无需尝试反向计算权限。
你可以把它想象成你放在脚本块旁边的所有东西,都会在远程计算机上发生,任何外来者都会 运行 在你的本地计算机上。
考虑到这一点,如果您在 SB 中写入文件,它将写入远程磁盘。 PS 的另一个特征是事物(在本例中为 Invoke-Command)几乎总是 returns 事物,因此如果您删除 $Result
之后的所有内容,包括 |
,数组$Result
将被退回。
这样你就可以把它变成一个变量,然后写入文件。
$Computer = "WIN-I9EKPIP774N"
$stuff = @{ win32_operatingsystem = "Version"
SoftwareLicensingService = "OA3xOriginalProductKey"
win32_ComputerSystem = "Manufacturer"
win32_bios = "SerialNumber"
win32_Processor = "Name"
Win32_PhysicalMemory = "Capacity"
win32_VideoController = "videoProcessor"
}
$SysInfo = [pscustomobject]::new()
$stuff.Keys | foreach { $SysInfo | Add-Member -MemberType NoteProperty -Name $_ -Value ( Get-CimInstance -ClassName $_ -ComputerName $Computer )."$( $stuff.$_ )" }
$SysInfo | Out-File C:\SYSINFO.HTML
编辑
我意识到我在我的代码建议中犯了一些错误,所以重写和修改它以使其更易于处理。
$stuff
包含您想从中获取信息的 class 和 class 中的 属性。
如果有多个存储卡,RAM 将是每个存储卡的容量列表。
事实证明,如果您创建一个变量并将调用命令存储在该变量中,然后将该变量通过管道传输到输出文件,您就会得到结果。此外,我没有使用计算机名称,而是通过 IP 地址将系统添加到受信任的主机文件中。生成的代码如下所示。
$OVERALL= Invoke-Command -computername 172.16.50.50 -credential Administrator -ScriptBlock {
$OS= (Get-WmiObject -class Win32_OperatingSystem).Caption;
$PK= powershell "(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey";
$MN= (Get-WmiObject -Class:Win32_ComputerSystem).Manufacturer;
$SN= Get-WmiObject win32_bios | Select SerialNumber;
$CPU= Get-WMIObject win32_Processor | select name;
$RAM= (systeminfo | Select-String 'Total Physical Memory:').ToString().Split(':')[1].Trim();
$GPU= Get-WmiObject win32_VideoController|select videoProcessor;
$Result= $GPU, $OS, $PK, $SN, $CPU, $RAM;
$Result};
$OVERALL| Out-file C:\SYSINFO.HTML
这成功地从本地主机向远程机器发送了对 sys 信息的请求,并将远程主机的 sys 信息写入了本地主机上的 html 文件。超酷的学习体验!