1

Прежде всего, я хочу извиниться. Я не работаю с Powershell. Это был отличный опыт для меня! Если мой код заставляет вас съеживаться, я извиняюсь :)PowerShell Удалить путь из Select-String Вывод с использованием переменной

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

Я использую пакетный скрипт, когда пользователи регистрируются, чтобы сохранить файл, чтобы я мог его искать, когда был отправлен запрос, но компьютер или даже здание не включены. Новый файл будет генерироваться автоматически в каждый день.

Это вход в пакетный сценарий связан как объект групповой политики:

echo User: , %username% , Computer: , %computername% , Date\Time: , %date% %time% >> \\path\to\my\saved\file-%date:~-4,4%%date:~-10,2%%date:~-7,2%.csv 

Это сценарий PowerShell, я использую для поиска пользователя:

Set-StrictMode -Version latest 

$path = '\\path\to\my\saved\' 
$ext='.csv' 
$file='file' 
$realFile="$path$file-$(get-date -F 'yyyyMMdd')$ext" 
$control = Read-Host -Prompt 'Which User are you looking for?' 
$output = $path + "\output.log" 
$CSV2String = Select-String -Pattern $control -Path $realFile 

Function getStringMatch 
{  
     $result = Select-String -Pattern $control -Path $realFile -Quiet 
     If ($result -eq $True) 
     { 
     $match = $realFile 
     Clear-Host 
     Write-Host "Success! $control found logged in today!" -Foregroundcolor "green" 
     ForEach ($line in $CSV2String) { 
     $text = $line -Split "," 
     ForEach($string in $text) { 
     Write-Host "$string" 
      } 
     } 
     Select-String -Pattern $control -Path $realFile | Out-File $output -Append 
     } ElseIf ($result -eq $False){ 
     Clear-Host 
     Write-Host "Error $control not found logged in, please check the User Name and try again!" -ForegroundColor "red" 
     Write-Host "'$control' Not logged in!" -ForegroundColor "yellow" 
     } 
} 

getStringMatch 

Это, кажется, отлично работает, однако когда я использую скрипт, вывод выглядит странным для меня, он отображает путь к файлу, который он искал, я не хочу этого. Я просто хочу получить информацию.

Success! SearchedUser found logged in today! 
\\path\to\my\saved\file-20160209.csv:1:User: 
SearchedUser 
Computer: 
MyComputer-01 
Date\Time: 
Tue 02/09/2016 9:31:41.93 

Как удалить "\ путь \ к \ моя \ сохранены \ файл-20160209.csv: 1:" часть из моей продукции? Мне нужно, чтобы он менялся в зависимости от дня, я хотел бы использовать переменную, если это возможно.

Я играл с -Replace, но я не смог добиться этого, чтобы выполнить задачу, которую я хотел.

Любая помощь будет оценена :)

+0

Я хотел включить закончил сценарий :( –

ответ

1

Когда вы звоните:

$CSV2String = Select-String -Pattern $control -Path $realFile 

он возвращает массив объектов MatchInfo. В настоящее время вы вызываете Split в формате вывода по умолчанию MatchInfo (который содержит конкатенацию свойств MatchInfo: Path: LineNumber: Line). Каждый объект MatchInfo имеет свойство Line, которое содержит только строку текста, которая была сопоставлена. Таким образом, вы можете изменить свой код, чтобы что-то вроде:

ForEach ($line in $CSV2String) 
{ 
    $text = $line.Line -Split "," 
+1

Ну, что было легко :) Спасибо, что определенно помогает! Он отлично работал! –

0

не ответ, просто делюсь мой готовый скрипт, делать с ним все, что угодно!

Завершена Рабочий сценарий: редактировать небольшое изменение output.log я сделал это выглядит так же, как выход Powershell, я могу изменить его снова, если кто-то есть идея получше. редактировать 2 вынули некоторые секретные биты я оставил в на аварии;)

########################################################### 
# AUTHOR : Jaymes Driver 
# DATE : 02-08-2016 
# COMMENT : Second part to log on script. 
#   Search the "log" file for instance of user 
#   output which machine user is logged into. 
########################################################### 

#ERROR REPORTING ALL 
Set-StrictMode -Version latest 

#Set Path for the reference file 
$path = '\\Path\To\My\' 
$ext = '.csv' 
$file = 'file' 
$realFile = "$path$file-$(get-date -F 'yyyyMMdd')$ext" 
$control = Read-Host -Prompt 'Which User are you looking for?' 
$output = $path + "\output.log" 

Function getStringMatch 
{  
    #-Quiet returns a True/False Value, we want to make sure the result is true! 
    $result = Select-String -Pattern $control -Path $realFile -Quiet 

    If ($result -eq $True) { 
     $match = $realFile 
     #Moved CSV2String here so in the future if file check is added, errors are not thrown 
     $CSV2String = Select-String -Pattern $control -Path $realFile 
     #Clear the screen for easier to read output 
     Clear-Host 
     Write-Host "Success! '$control' found logged in today!" -Foregroundcolor "green" 
     #for every instance we find do the following 
      ForEach ($line in $CSV2String) { 
      # use below code if you need to replace any spaces in the data of csv file 
      #$line = $line.text - Replace " ", "" 
      #Split the outputs 
      $text = $line.Line -Split "," 
      #For every output, write it 
       ForEach($string in $text) { 
       Write-Host "$string" 
       } 
      } 
     #Write the successful search to the log 
     ForEach($string in $text) { 
     $string | Out-File $output -Append 
     } 
     #If the value is false, then what? 
    } ElseIf ($result -eq $False){ 
     Clear-Host 
     #Clear the screen so its easier to read the output 
     Write-Host "Error '$control' not found logged in, please check the User Name and try again!" -ForegroundColor "red" 
     Write-Host "'$control' Not found to be logged in!" -ForegroundColor "yellow" 
     } 
} 


#Do the darn thing! 
getStringMatch 

 Смежные вопросы

  • Нет связанных вопросов^_^