• Запуск cmd получив список с txt, как?

    serjius
    @serjius
    тогда лог выполнения скрипта в студию )
  • Запуск cmd получив список с txt, как?

    serjius
    @serjius
    у меня это скрипт выполняется для всех ПК из списка и сохраняет в отдельные файлы.
    может к остальным просто нет доступа?
  • Запуск cmd получив список с txt, как?

    serjius
    @serjius
    Dima Kim: например вот так
    $Software=@{}
    
    
    Import-CSV ".\computers.csv" -header("ComputerName") | ForEach {
    	$array = @()
    	$computername = $_.ComputerName #чуть-чуть упростим, мне так удобнее :)
    
        #Define the variable to hold the location of Currently Installed Programs
    	
        $UninstallKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
    
        #Create an instance of the Registry Object and open the HKLM base key
    
        $reg=[microsoft.win32.registrykey]::OpenRemoteBaseKey('LocalMachine',$computername) 
    
        #Drill down into the Uninstall key using the OpenSubKey Method
    
        $regkey=$reg.OpenSubKey($UninstallKey) 
    
        #Retrieve an array of string that contain all the subkey names
    
        $subkeys=$regkey.GetSubKeyNames() 
    
        #Open each Subkey and use GetValue Method to return the required values for each
    
        foreach($key in $subkeys){
    
            $thisKey=$UninstallKey+"\\"+$key 
    
            $thisSubKey=$reg.OpenSubKey($thisKey) 
    
            $obj = New-Object PSObject
    
            $obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $computername
    
            $obj | Add-Member -MemberType NoteProperty -Name "DisplayName" -Value $($thisSubKey.GetValue("DisplayName"))
    
            $obj | Add-Member -MemberType NoteProperty -Name "DisplayVersion" -Value $($thisSubKey.GetValue("DisplayVersion"))
    
            $obj | Add-Member -MemberType NoteProperty -Name "InstallLocation" -Value $($thisSubKey.GetValue("InstallLocation"))
    
            $obj | Add-Member -MemberType NoteProperty -Name "Publisher" -Value $($thisSubKey.GetValue("Publisher"))
    
            $array += $obj
    
        } 
    	$Software.Add($computername,$array)
    }
    
    foreach ($pc in $Software.Keys ) {
    	write-host "Save" $pc
    	$Software[$pc] | Where-Object { $_.DisplayName } | select ComputerName, DisplayName, DisplayVersion, Publisher | ft -auto >> c:\temp\$pc.txt
    }
  • Запуск cmd получив список с txt, как?

    serjius
    @serjius
    так. вернемся немного в начало. сейчас проверил у себя
    script.bat
    echo %DATE%

    Скрипт на PowerShell
    Import-CSV ".\computers.csv" -header("ComputerName") | ForEach {
        $ComputerName = $_.ComputerName 
        New-Item  \\$ComputerName\c$\temp -Type Directory 
        Copy-Item "script.cmd" \\$ComputerName\c$\temp\
    
        .\psexec.exe \\$ComputerName "C:\temp\script.cmd" 
    }

    computers.csv
    sam-01
    sam-02
    sam-03
    sam-04
    sam-05
    sam-06


    вывод был такой
    PS E:\work\rn\Zabbix\ManageAgents> .\test.ps1
    
    PsExec v2.0 - Execute processes remotely
    Copyright (C) 2001-2013 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    
    
    C:\WINDOWS\system32>echo 22.07.2016
    22.07.2016
    C:\temp\script.cmd exited on sam-01 with error code 0.
  • Запуск cmd получив список с txt, как?

    serjius
    @serjius
    покажи пример что у тебя в списке пк? у меня похожим скриптом ставятся zabbix агенты на сервера.
    в файле computers.csv имена пк на отдельной строке
  • Запуск cmd получив список с txt, как?

    serjius
    @serjius
    еще. попробуй выполнить
    Get-WmiObject -computername  -class win32_product | ft name,vendor,version,caption

    это тоже как вариант. если это не отработает то у тебя есть проблемы с доступом к компам и сначала надо решить их.
    либо добавить пользователям logonscript или через групповую политику исполнять скрипт по выгрузке списка ПО.
    либо пользоваться специализированным ПО по инвентаризации.
  • Запуск cmd получив список с txt, как?

    serjius
    @serjius
    если вызвать в консоли psexec \\pcname cmd.exe
    отрабатывает нормально? возможно нет доступа к машине либо на машине нет шары admin$

    так же может быть из-за брендмауера
  • Запуск cmd получив список с txt, как?

    serjius
    @serjius
    так надо положить рядом с скриптом psexec она есть в комплекте pstools от руссиновича или sysinternals