0

フォローアップの質問をすることが許されていれば、古い質問を使用したでしょう。

私の質問はここと同じです: Get Logged on Users from a List of Computer Names答えは良いですが、入力の computer.csv をどのようにフォーマットする必要があるかわかりません。

4

3 に答える 3

1

これ (csv ファイル) は次のようにフォーマットする必要があります。

computername
server1
server2
server3

「Computername」は列名です。これは、Foreach-Object が ComputerName プロパティを参照するため、コード スニペットから派生させることができます。

于 2013-06-20T09:43:19.863 に答える
0

わかりました...この質問は古いものですが、最近、そのドメインのすべてのワークステーションにログインした特定のドメインからすべてのユーザーをプルしなければならないという正確な問題に遭遇しました。これは、私が見つけてかなり広範囲に変更したコードのスニペットから思いついたものです。このスクリプトは Workstation.CSV ファイルからワークステーションのリストを読み取り、Excel で開くことができる適切にフォーマットされた .csv ファイルに出力します。

#
# ########################################################################################
# Script Execution is as follows
# .\LoggedOn_All.ps1
# ########################################################################################
# Script generates a list ofComputers from Active Directory and
# pulls listing of all users that have logged in to those Workstations
# Before running script, rename or delete the following files
# Workstations.csv
# Worksation_Logged_On_Users.csv
# NotPingable.csv
##########################################################################################

#Generate a listing of Workstations from Active Directory
#While this command can be run inside the script, I comment it out and copy it to powershell
#so that I can verify the contents of the file before running the script
Get-ADComputer -Filter * -SearchBase "<DISTINGUISHED NAME of the OU that contains your Workstations>" | Select -Exp Name >> Workstations.csv

#Set workstation list file (get list of workstations from file)
$list = Get-Content "<put full path here> Workstations.csv"

#Set Output file
$OUTPUT = "<put full path here> Worksation_Logged_On_Users.csv"
#set headers in CSV output file
echo "Workstation Name,User,LogonTime" | Out-File -Encoding ascii -FilePath $OUTPUT

#begin script logic
$list | ForEach-Object {

echo "Current computer $_"

#Test if system is online
Invoke-Expression "ping -n 1 -w 500 $_" | Out-Null
$ping = $LASTEXITCODE

#If Pingable perform the following collection actions
if (!$ping){

#Retrieve listings of ALL users that have logged on to the Workstation/Laptop and send results to Output File

$NetLogs = Get-WmiObject Win32_NetworkLoginProfile -ComputerName $_
foreach ($NetLog in $NetLogs) {
 
if ($NetLog.Name -match "<DOMAIN>*" -AND $NetLog.LastLogon -match "(\d{14})") { 
$row = "" | Select Name,LogonTime 
$row.Name = $NetLog.Name 
$row.LogonTime=[datetime]::ParseExact($matches[0], "yyyyMMddHHmmss", $null) 
    foreach ($RName in $row) {
        $USR = $row.Name
        $LTime = $row.LogonTime
        #Write "Workstation Name, User, and TimeStamp" results to Output File
        echo "$_,$USR,$LTime" >> $OUTPUT }
} 
} 

} else {
#If System is not pingable, the System Name is written to the NotPingable.csv file
echo "$_ not pingable"
echo "$_" >> NotPingable.csv
}

}

于 2015-05-29T12:50:17.677 に答える
0

これを試して

function Get-MyLoggedOnUsers
{
  param([Array]$Computer)
  Get-WmiObject Win32_LoggedOnUser -ComputerName $Computer |
  Select __SERVER, Antecedent -Unique |
  %{"{0} : {1}\{2}" -f $_.__SERVER, $_.Antecedent.ToString().Split('"')[1],       $_.Antecedent.ToString().Split('"')[3]}
}

$Computers = gc C:\Temp\Computers.txt

Get-MyLoggedOnUsers $Computers

-また-

これを見つけて、自分のニーズに合わせて修正しました

<#
.Synopsis
Queries a computer to check for interactive sessions

.DESCRIPTION
This script takes the output from the quser program and parses this to PowerShell objects

.NOTES   
Name: Get-LoggedOnUser
Author: Jaap Brasser
Version: 1.1
DateUpdated: 2013-06-26

.LINK
http://www.jaapbrasser.com

.PARAMETER ComputerName
The string or array of string for which a query will be executed

.EXAMPLE
.\Get-LoggedOnUser.ps1 -ComputerName server01,server02

Description:
Will display the session information on server01 and server02

.EXAMPLE
'server01','server02' | .\Get-LoggedOnUser.ps1

Description:
Will display the session information on server01 and server02
#>
param(
[CmdletBinding()] 
[Parameter(ValueFromPipeline=$true,
           ValueFromPipelineByPropertyName=$true)]
[array[]]$ComputerName = (gc C:\Temp\TSRA.txt)
)

process {
foreach ($Computer in $ComputerName) {
    quser /server:$Computer | Select-Object -Skip 1 | ForEach-Object {
        $CurrentLine = $_.Trim() -Replace '\s+',' ' -Split '\s'
        $HashProps = @{
            UserName = $CurrentLine[0]
            ComputerName = $Computer
        }

        # If session is disconnected different fields will be selected
        if ($CurrentLine[2] -eq 'Disc') {
                $HashProps.SessionName = $null
                $HashProps.Id = $CurrentLine[1]
                $HashProps.State = $CurrentLine[2]
                $HashProps.IdleTime = $CurrentLine[3]
                $HashProps.LogonTime = $CurrentLine[4..6] -join ' '
        } else {
                $HashProps.SessionName = $CurrentLine[1]
                $HashProps.Id = $CurrentLine[2]
                $HashProps.State = $CurrentLine[3]
                $HashProps.IdleTime = $CurrentLine[4]
                $HashProps.LogonTime = $CurrentLine[5..7] -join ' '
        }

        New-Object -TypeName PSCustomObject -Property $HashProps |
        Select-Object -Property UserName,ComputerName,SessionName,Id,State,IdleTime,LogonTime
    } | Out-GridView -Title "Users Logged in $Computer"

   }
}
于 2014-06-25T03:54:59.907 に答える