none
Скрипт инвентаризации в PowerShell 2.0 и выше. RRS feed

  • Вопрос

  • Люди, всем, привет!!! Я сисадмин, а мой начальник - главный сисадмин - попросил меня написать в PowerShell'е скрипт, дабы снять со всех компов серийники основных 

    устройств, которые онлайн в его домене, их там 400 штук пк (или просто в базе данных active directory) и вывести всю инфу в текст или эксель - дабы потом сделать базу 

    данных всех главных комплектующих с их названием, серийниками и характеристиками. Вот вопрос - как это сделать?)) Вот что придумал, написал на свой пк:

    get-wmiobject win32_BaseBoard | select Name, Manufacturer, SerialNumber | format-list | out-file  C:\Users\Karbofos\Desktop\Info.txt
    get-wmiobject win32_Bios | format-list | out-file -append  C:\Users\Karbofos\Desktop\Info.txt
    get-wmiobject win32_Processor | select Name, Manufacturer, ProcessorID | format-list | out-file -append C:\Users\Karbofos\Desktop\Info.txt
    get-wmiobject win32_PhysicalMemory | select Name, Manufacturer, Capacity, SerialNumber | format-list | out-file -append C:\Users\Karbofos\Desktop\Info.txt
    get-wmiobject win32_DiskDrive | select Name, Model, Size, Caption | format-list | out-file -append C:\Users\Karbofos\Desktop\Info.txt
    get-wmiobject win32_NetworkAdapter | select Name, MacAddress | format-list | out-file -append C:\Users\Karbofos\Desktop\Info.txt 

    но надо, чтоб все это как скрипт с ярлычка запускалось и сканило, наверное, все пк в домене. Подскажите как это сделать, пожалуйста.
    28 апреля 2015 г. 10:56

Ответы

  • Здравствуйте, да уже просто хочу у себя на локальном пк, чтобы нажать на файл расширением .ps1

    он снял только инфу с моего пк  типо такого:

    get-wmiobject win32_Bios | format-list | out-file  C:\Users\имя юзера\рабочий стол\название файла.txt

    и сам создал папку под названием например info на рабочем столе у юзера (меня) под которым я залогинен и внутри этой папки info чтобы он создал файл .txt  который назовется именем компьютера (которое в свойствах "мой компьютер" например) вот - пытаюсь чтото подобное сделать - чтобы показать начальству - а после разобраться в коде и пройтись по компам не в домене, и все свести в экселевскую базу по характеристикам


    # Создание переменных (так к ним проще будет обращаться)
    $UserProfile = $env:USERPROFILE
    $Computername = $env:COMPUTERNAME 
    $OutPath = "$UserProfile\desktop\info\$Computername`.txt"
    
    # Проверка пути, и в случае если путь недоступен создать недостающие директории 
    if (-not (Test-Path "$UserProfile\desktop\info")) {New-Item "$UserProfile\desktop\info" -ItemType Directory -Force}
    
    # Ваш скрипт с выводом результатов в файл (Путь и имя файла находится в переменной $OutPath)
    get-wmiobject win32_Bios | format-list | out-file $OutPath


    Модератор

Все ответы

  • что касается запускания с ярлыка то вы можете создать ярлык в котором написать

    powershell.exe -executionpolicy bypass -command "c:\yourpath\yourscript.ps1"

    что касается сбора со всех машин то вам нужен список всех машин, как следствие вам нужен кд (с него можно получить список всех машин)

    например

    get-adcomputer -filter * | foreach {
    $computer = $_.name
    Get-wmiobjects -computername $computer ....
    
    }

    и выводить вы это должны как то идентифицируя машину с которой инфа собрана

    | out-file  C:\Users\Karbofos\Desktop\Info.txt

    заменить на 

    | out-file  "C:\outfiles\$computer.txt"




    28 апреля 2015 г. 11:12
    Модератор
  • Ввожу  

    | out-file "C:\outfiles\$computer.txt"

    а ps сохраняет файл без имени, просто пусто .txt а реально хотелось бы сразу имя пк чтоб писал

    29 апреля 2015 г. 11:47

  • get-adcomputer -filter * | foreach {
    $computer = $_.name
    Get-wmiobjects -computername $computer ....
    
    }

    Этот блок является обязательным))

    либо вы можете использовать какой то другой в котором в переменную $computer будет присваиваться имя машинки

    Например если вы тестируете на одной машинке то можете сделать

    get-adcomputer Yourcomputername | foreach {
    $computer = $_.name
    Get-wmiobjects -computername $computer ....
    
    }



    29 апреля 2015 г. 11:58
    Модератор
  • Вопрос - какую строку пропимсать вначале - чтобы название txt файла было именем моего пк, но  у меня нет админских прав, павершелл ругается на
    get-adcomputer
     вот так...
    30 апреля 2015 г. 11:03
  • "comp1","comp2","comp3" | foreach {
    $computer = $_
    get-wmiobject -computername $computer win32_BaseBoard | select Name, Manufacturer, SerialNumber | format-list | out-file  C:\Users\$computer.txt
    get-wmiobject -computername $computer win32_Bios | format-list | out-file -append  C:\Users\$computer.txt
    get-wmiobject -computername $computer win32_Processor | select Name, Manufacturer, ProcessorID | format-list | out-file -append C:\Users\$computer.txt
    get-wmiobject -computername $computer win32_PhysicalMemory | select Name, Manufacturer, Capacity, SerialNumber | format-list | out-file -append C:\Users\$computer.txt
    get-wmiobject -computername $computer win32_DiskDrive | select Name, Model, Size, Caption | format-list | out-file -append C:\Users\$computer.txt
    get-wmiobject -computername $computer win32_NetworkAdapter | select Name, MacAddress | format-list | out-file -append C:\Users\$computer.txt 
    }

    Поясните как без админ полномочий вы будете по всем машинам это делать?

    Если вопрос в том что бы локально ка каждой машине это руками запускать то можно упростить

    $computer = $Env:computername
    get-wmiobject -computername $computer win32_BaseBoard | select Name, Manufacturer, SerialNumber | format-list | out-file  C:\Users\$computer.txt
    get-wmiobject -computername $computer win32_Bios | format-list | out-file -append  C:\Users\$computer.txt
    get-wmiobject -computername $computer win32_Processor | select Name, Manufacturer, ProcessorID | format-list | out-file -append C:\Users\$computer.txt
    get-wmiobject -computername $computer win32_PhysicalMemory | select Name, Manufacturer, Capacity, SerialNumber | format-list | out-file -append C:\Users\$computer.txt
    get-wmiobject -computername $computer win32_DiskDrive | select Name, Model, Size, Caption | format-list | out-file -append C:\Users\$computer.txt
    get-wmiobject -computername $computer win32_NetworkAdapter | select Name, MacAddress | format-list | out-file -append C:\Users\$computer.txt 
    

    30 апреля 2015 г. 13:33
    Модератор
  • Дико извиняюсь, но Вы MAP принципиально не хотите использовать?

    Roman Levchenko, MCSA, MCITP, MCTS http://www.rlevchenko.com

    30 апреля 2015 г. 17:01
  • Задание начальник дал именно в павершеле отписаться ему.
  • Извините, мб напрягаю вас, но у вас самые лучшие и понятные ответы, что нужно написать в PowerShell чтобы создать экселевский файл на рабочем столе с именем залогиненого юзера?

    (а админские права есть у начальника - он будет тестить скрипт)

  • поясните пожалуйста что и где должно быть написано?

    вы хотите узнать всех залогиненых пользователей на локальной машине?
    Модератор
  • вы можете получить залогиненых пользователей например так

    gwmi win32_loggedonuser -Property * |select Antecedent -Unique | where {$_.Antecedent -notlike "*$($Env:COMPUTERNAME)*"} | foreach {($_.Antecedent -split "Name=")[-1] -replace "`""}

    Это без локальных пользователей (только доменные)

    Что бы вывести всех нужно убрать

    where {$_.Antecedent -notlike "*$($Env:COMPUTERNAME)*"} |

    что бы это вывалить в файл на рабочем столе часть строки добавьте в конец

     | out-file "C:\users\$($Env:UserName)\Desktop\out.csv" -Encoding UTF8 -Append 

    Полный более короткий вариант:

    (gwmi win32_loggedonuser -Property *).Antecedent |select -Unique | where {$_ -notlike "*$($Env:COMPUTERNAME)*"} | foreach {($_ -split "Name=")[-1] -replace "`""} | out-file "C:\users\$($Env:UserName)\Desktop\out.csv" -Encoding UTF8 -Append  


    Модератор
  • Здравствуйте, да уже просто хочу у себя на локальном пк, чтобы нажать на файл расширением .ps1

    он снял только инфу с моего пк  типо такого:

    get-wmiobject win32_Bios | format-list | out-file  C:\Users\имя юзера\рабочий стол\название файла.txt

    и сам создал папку под названием например info на рабочем столе у юзера (меня) под которым я залогинен и внутри этой папки info чтобы он создал файл .txt  который назовется именем компьютера (которое в свойствах "мой компьютер" например) вот - пытаюсь чтото подобное сделать - чтобы показать начальству - а после разобраться в коде и пройтись по компам не в домене, и все свести в экселевскую базу по характеристикам


    # Создание переменных (так к ним проще будет обращаться)
    $UserProfile = $env:USERPROFILE
    $Computername = $env:COMPUTERNAME 
    $OutPath = "$UserProfile\desktop\info\$Computername`.txt"
    
    # Проверка пути, и в случае если путь недоступен создать недостающие директории 
    if (-not (Test-Path "$UserProfile\desktop\info")) {New-Item "$UserProfile\desktop\info" -ItemType Directory -Force}
    
    # Ваш скрипт с выводом результатов в файл (Путь и имя файла находится в переменной $OutPath)
    get-wmiobject win32_Bios | format-list | out-file $OutPath


    Модератор
  • $computer = $Env:computername
    get-wmiobject -computername $computer win32_BaseBoard | select Name, Manufacturer, SerialNumber | format-list | out-file C:\Users\$($Env:UserName)\Desktop\

    $computer.txt
    get-wmiobject -computername $computer win32_Processor | select Name, Manufacturer, ProcessorID | format-list | out-file -append C:\Users\$($Env:UserName)\Desktop\

    $computer.txt

    только еще бы не просто на рабочий стол выкладывалось а в папочку INFO - куда ее вписать?

  • $computer = $Env:computername
    get-wmiobject -computername $computer win32_BaseBoard | select Name, Manufacturer, SerialNumber | format-list | out-file C:\Users\$($Env:UserName)\Desktop\

    $computer.txt
    get-wmiobject -computername $computer win32_Processor | select Name, Manufacturer, ProcessorID | format-list | out-file -append C:\Users\$($Env:UserName)\Desktop\

    $computer.txt

    только еще бы не просто на рабочий стол выкладывалось а в папочку INFO - куда ее вписать?

    я выше вам привел ответ насчёт папочки INFO

    Он выделен жирным

    get-wmiobject -computername $computer win32_Processor | select Name, Manufacturer, ProcessorID | format-list | out-file "C:\Users\$($Env:UserName)\Desktop\INFO\ $computer`.txt"  -append 


    Обратите внимание на тильду и на кавычки

    + Если у вас папки инфо не будет получете ошибку что бы этого не было используйте пример приведенный мною выше

    + путь лучше писать вначале

    Модератор
  • ок, спс, все понял и разобрался
  • В итоге вот что пока написал, для своего локального пк..

    $computer = $Env:computername
    $UserProfile = $env:USERPROFILE
    New-Item $UserProfile\desktop\Inventory -ItemType Directory -force
    get-wmiobject -computername $computer win32_BaseBoard | select Name, Manufacturer, SerialNumber | format-list | out-file C:\Users\$($Env:UserName)\Desktop\Inventory\$computer.txt
    get-wmiobject win32_Processor | select Name, Manufacturer, ProcessorID | format-list | out-file -append C:\Users\$($Env:UserName)\Desktop\Inventory\$computer.txt
    get-wmiobject win32_Bios | select Name, Manufacturer | format-list | out-file -append C:\Users\$($Env:UserName)\Desktop\Inventory\$computer.txt
    get-wmiobject Win32_CDROMDrive | select Caption, Drive, serialnumber | format-list | out-file -append C:\Users\$($Env:UserName)\Desktop\Inventory\$computer.txt
    get-wmiobject Win32_DesktopMonitor | select PNPDeviceID | format-list | out-file -append C:\Users\$($Env:UserName)\Desktop\Inventory\$computer.txt
    get-wmiobject Win32_DiskDrive | select DeviceID, Model, Size, Caption | format-list | out-file -append C:\Users\$($Env:UserName)\Desktop\Inventory\$computer.txt
    get-wmiobject Win32_NetworkAdapter | select DeviceID, MacAddress, Name | format-list | out-file -append C:\Users\$($Env:UserName)\Desktop\Inventory\$computer.txt
    get-wmiobject Win32_NetworkAdapterConfiguration | select IpAddress, Description | format-list | out-file -append C:\Users\$($Env:UserName)\Desktop\Inventory\$computer.txt
    get-wmiobject Win32_PhysicalMemory | select capacity, caption, manufacturer, partnumber, serialnumber, speed | format-list | out-file -append C:\Users\$($Env:UserName)\Desktop\Inventory\$computer.txt

    а еще было бы интересно как узнавать из PowerShell'а серийные номера ms office: word, visio, acsess и т.п.? 

  • 100% рабочего варианта нет так как ключи могут храниться. а могут и не храниться

    У меня готового решения нет. но на скрипт центре можно найти

    Модератор