2013-10-10 3 views
0

Этого сообщения для использования Get-ChildItem, чтобы найти последний вход пользователя был весьма полезным, Powershell - last logged on user - same input, different outputGet-ChildItem, чтобы найти последний вход пользователя

Однако, я бег в некоторых проблемы.

Я пишу следующую команду:

Get-Childitem c:\users\*\ntuser.dat -force | select-object -last 1 {(Split-path $_.directory -leaf)},last* | sort lastwritetime -descending 

Это дает выход в виде

(Split-path $_.directory -leaf) : jjoe 
LastAccessTime     : 10/10/2013 11:37:14 AM 
LastAccessTimeUtc    : 10/10/2013 3:37:14 PM 
LastWriteTime     : 10/10/2013 1:51:02 PM 
LastWriteTimeUtc    : 10/10/2013 5:51:02 PM 

Как мне сделать этот выходной jjoe вместо всех этих линий?

Я попытался

$abc = Get-Childitem c:\users\*\ntuser.dat -force | select-object -last 1 {(Split-path $_.directory -leaf)},last* | sort lastwritetime -descending 

$abc.(Split-path $_.directory -leaf) 

Но это не работает.

Спасибо!

ответ

2

Заменить это:

{(Split-path $_.directory -leaf)},last* 

с этим:

@{ n='Username'; e={ Split-path $_.directory -leaf } },last* 

Тогда свойство называется на трубопроводе, а затем вы можете сделать:

<your script> | Select -Expand UserName 

Объяснение: @{Name=$StringVaue; Expression=$ScriptBlock} является как вы можете добавить Calculated Properties в Select-Object. Краткая форма @{n=$StringValue; e=$ScriptBlock}

+0

Wow, Calculated Properties! – Glowie

+0

Они также работают при использовании 'Format- *'. – Eris

1

Вы также можете получить имя без Split-Path. Свойство Directory является объектом System.IO.DirectoryInfo, поэтому вы можете получить его свойство name:

... @{n='Username'; e={$_.Directory.Name }}