首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从远程PC上获取系统信息并将其写入本地文件(Powershell)

从远程PC上获取系统信息并将其写入本地文件(Powershell)
EN

Stack Overflow用户
提问于 2021-02-17 18:21:52
回答 3查看 1.1K关注 0票数 0

因此,我试图编写一个脚本,从网络上的计算机上收集系统信息,然后将收集到的信息写入我的C:\驱动器中的HTML文件中。到目前为止我的情况是这样的。

代码语言:javascript
复制
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和主机名将这些机器添加到托管主机中,但仍然无法将其连接回本地计算机并写入文件。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-19 20:21:54

如果您创建一个变量并将invoke命令存储在该变量中,然后将该变量输送到out,则会得到您的结果。另外,我没有使用计算机名,而是通过IP地址将系统添加到受信任的主机文件中。生成的代码如下所示。

代码语言:javascript
复制
$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

这成功地将来自localhost的sys信息请求发送到远程计算机,并将远程主机的sys信息写入localhost上的html文件。很酷的学习体验!

票数 0
EN

Stack Overflow用户

发布于 2021-02-17 18:27:24

现在你有这样的事情:

代码语言:javascript
复制
Invoke-Command -computername blah -ScriptBlock { (do stuff) | out-file targetfile.txt }

因为out-file位于脚本块中,所以它在远程计算机上执行。最简单的解决方法是将它移到脚本块之外,所以它更像是:

代码语言:javascript
复制
Invoke-Command -computername blah -ScriptBlock { (do stuff) } | out-file targetfile.txt

这样,输出将通过本地计算机上的out-file进行管道传输,您不需要尝试以相反的方向计算权限。

票数 0
EN

Stack Overflow用户

发布于 2021-02-17 19:17:43

你可以把它想象成你放的所有东西

考虑到这一点,如果您写入SB中的文件,它将被写入远程磁盘。PS的另一个特性是,事务(在本例中是调用命令)几乎总是返回内容,因此如果在$Result之后删除所有内容,包括|,则将返回数组$Result

因此,您可以将其作为变量,然后将其写入文件。

代码语言:javascript
复制
$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包含要从该类获取信息的类和从该类获取的属性。如果有多个内存卡,RAM将是每个存储卡的容量列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66247789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档