@StenMarsh1337

Записать информацию о ПК в текстовый файл через PowerShell?

Всем привет)
Нужно чтобы скрипт собирал инфу о ПК и записывал в текстовый файл, но нужно сделать так чтобы скрипт не писал инфу если такой комп уже есть в файле
5fd9fef0c03e4313001349.png
$fname = "C:\pcinfo.txt"
$CPU = Get-WmiObject  -Class win32_processor
$MB = Get-WmiObject  -Class win32_baseboard
$MEM = Get-WmiObject Win32_PhysicalMemory
$DD = Get-PhysicalDisk
$pcn = Get-WmiObject -Class Win32_ComputerSystem

#имя компьютера
"pcname:	"+$pcn.Name | Out-File -FilePath $fname -Append -Encoding Default
#IP-адрес компьютера по его имени
Get-WmiObject Win32_NetworkAdapter -Filter 'NetConnectionStatus=2' |
ForEach-Object {
$pcip = 1 | Select-Object IP
$config = $_.GetRelated('Win32_NetworkAdapterConfiguration') 
$pcip.IP = $config | Select-Object -expand IPAddress
$pcip
}
foreach($aip in $pcip) {
"IP:	"+$aip.IP | Out-File -FilePath $fname -Append -Encoding Default
}
#имя активного пользователя
"username:	"+$env:UserName | Out-File -FilePath $fname -Append -Encoding Default
  • Вопрос задан
  • 473 просмотра
Пригласить эксперта
Ответы на вопрос 3
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Как всегда есть простой и сложный способ. Первый писать лок файл с именем компа, если в директории нет имени то добавлять . Второй это вариация, только запись идёт в файл построчно, и считывается. Третий вариант это локальная база данных или xml вы читаете что есть и при совпадении не пишете
Ответ написан
@MaxKozlov Куратор тега PowerShell
читаете файл до того как туда что-то писать и не пишете если нашли в нём строку про "pcname: xxx"
Ответ написан
@alhaos
@'
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <pc>
        <ip>1.1.1.1</ip>
        <name>2112</name>
        <userName>admin</userName>
    </pc>
    <pc>
        <ip>1.1.1.2</ip>
        <name>2113</name>
        <userName>admin</userName>
    </pc>
</root>
'@ | out-file d:\tmp\pcExampleFile.xml

class ComputerInfo {
    [String]$name
    [String]$IPAddress
    [String]$userName

    ComputerInfo() {
        $this.name = $env:COMPUTERNAME
        $this.IPAddress = ((Get-NetIPAddress).where{ $_.AddressFamily -eq 'IPv4' }).IPAddress -join ", "
        $this.userName = $env:USERNAME
    }
}

[xml]$pcXML = Get-Content d:\tmp\pcExampleFile.xml
$ComputerInfoInstance = [ComputerInfo]::New()

if (($thisPCNode = $pcXML.SelectSingleNode("//pc[name=`"$($ComputerInfoInstance.name)`"]"))){
    $thisPCNode.ip = $ComputerInfoInstance.IPAddress
    $thisPCNode.userName = $ComputerInfoInstance.userName
}
else {
    $nodePC = $pcXML.root.AppendChild($pcXML.CreateElement("pc"))
    $nodeIPAddress = $pcXML.CreateElement("IPAddress")
    $nodeIPAddress.InnerText = $ComputerInfoInstance.IPAddress
    [void]$nodePC.AppendChild($nodeIPAddress)
    $nodeName = $pcXML.CreateElement("name")
    $nodeName.InnerText = $ComputerInfoInstance.name
    [void]$nodePC.AppendChild($nodeName)
    $nodeUserName = $pcXML.CreateElement("UserName")
    $nodeUserName.InnerText = $ComputerInfoInstance.userName
    [void]$nodePC.AppendChild($nodeUserName)
}
$pcXML.Save("d:\tmp\pcExampleFile.xml")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы