none
PowerShell Get-Content RRS feed

  • Вопрос

  • Здравствуйте.

    Возник такой вопрос.

    Каким образом в ПОШ можно получить контент файла который расположен в сетевой шаре, к примеру, тут: \\domain\NETLOGON\

    Пробовал таким способом:

    $hsts = Get-Content -Path "\\Domain\NETLOGON\csv\"

    Но в итоге получил следующее:

    Get-Content : The filename, directory name, or volume label syntax is incorrect.
    At line:1 char:9
    + $hsts = Get-Content -Path "\\Domain\NETLOGON\csv\"
    +         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ReadError: (\\Domain\NETLOGON\csv\:String) [Get-Content], IOException
        + FullyQualifiedErrorId : GetContentReaderIOError,Microsoft.PowerShell.Commands.GetContentCommand
    Каким образом можно считать контент файла из сетевой шары?

    27 декабря 2017 г. 8:04

Ответы

  • https://technet.microsoft.com/en-us/library/cc956689.aspx

    Explanation:
    
    The system does not accept the keyboard combination Alt+0 through Alt+32 or the following characters: \\ \\ / [ ] : | < > + ; = . ? "
    
    User Action:
    
    Correct the file name or volume label and try the command again.

    В остальном все работает:

    PS > Get-Content -Path "\\corp.contoso.ru\NETLOGON\log.bat"
    set hour=%time:~0,2%
    if "%hour:~0,1%" == " " set hour=0%hour:~1,1%

    • Помечено в качестве ответа ReMCatcheR 27 декабря 2017 г. 8:29
    27 декабря 2017 г. 8:14
    Отвечающий
  • #Для выхода набрать quit
    while(!$user -and $usr -ne "quit") {
    	$usr = read-host "Enter username account in format 'domain\username'"
    	$user = $users | Where {$_.UserName -eq "$usr"}
    }

    • Помечено в качестве ответа ReMCatcheR 27 декабря 2017 г. 14:26
    27 декабря 2017 г. 14:01
    Отвечающий

Все ответы

  • https://technet.microsoft.com/en-us/library/cc956689.aspx

    Explanation:
    
    The system does not accept the keyboard combination Alt+0 through Alt+32 or the following characters: \\ \\ / [ ] : | < > + ; = . ? "
    
    User Action:
    
    Correct the file name or volume label and try the command again.

    В остальном все работает:

    PS > Get-Content -Path "\\corp.contoso.ru\NETLOGON\log.bat"
    set hour=%time:~0,2%
    if "%hour:~0,1%" == " " set hour=0%hour:~1,1%

    • Помечено в качестве ответа ReMCatcheR 27 декабря 2017 г. 8:29
    27 декабря 2017 г. 8:14
    Отвечающий
  • Действительно, изначально ругался на синтаксис, теперь тупо на права доступа, переложил  в другую директорию, сразу подхватил контент. Спасибо!
    27 декабря 2017 г. 8:29
  • Но на самом деле есть еще вопрос. 

    Есть такая функция

    Function Get-LoggedOnUser
     {
         [CmdletBinding()]
         param
         (
             [Parameter()]
             [ValidateScript({ Test-Connection -ComputerName $_ -Quiet -Count 1 -ErrorAction SilentlyContinue})]
             [ValidateNotNullOrEmpty()]
             [string[]]$ComputerName = $env:COMPUTERNAME
         )
         foreach ($comp in $ComputerName)
         {
             $output = @{ 'ComputerName' = $comp }
             $output.UserName = (Get-WmiObject -Class win32_computersystem -ComputerName $comp).UserName
             [PSCustomObject]$output
         }
     }
    [ValidateScript({ Test-Connection -ComputerName $_ -Quiet -Count 1 -ErrorAction SilentlyContinue})]

    -ErrorAction SilentlyContinue вот эта штука, почему то не работает. Ошибки все равно выходят на экран

    Как победить выходящие ошибки, что бы они на эркане вообще не появлялись?


    27 декабря 2017 г. 8:31
  • И не должна, т.к. исключение генерирует ValidateScript, а не Test-Connection.

    Get-Help about_Functions_Advanced_Parameters

    ValidateScript Validation Attribute
    
        The ValidateScript attribute specifies a script that is used
        to validate a parameter or variable value. Windows PowerShell
        pipes the value to the script, and generates an error if the
        script returns "false" or if the script throws an exception.
    foreach ($comp in $ComputerName)
         {
    		if(Test-Connection -ComputerName $comp -Quiet -Count 1) {
    			$output = @{ 'ComputerName' = $comp }
    			$output.UserName = (Get-WmiObject -Class win32_computersystem -ComputerName $comp).UserName
    			[PSCustomObject]$output
    		}
         }



    • Изменено KazunEditor 27 декабря 2017 г. 8:51 $comp
    27 декабря 2017 г. 8:50
    Отвечающий
  • Все понял. С этим разобрался. А можете еще подсказать такую штуку:

    Вот часть кода

    $usr = read-host "Enter username account in format 'domain\username'"
    $user = $users | Where {$_.UserName -eq "$usr"}
    
    #Проверяем, найден ли в списке запрашиваемый пользователь
    if ($user) 
                {
            Write-host "Found a Match $user"
               }            
    else       
               {
            Write-Host "Match not found"
               }
    В случае если в переменную внесли ошибочные данные, скажем добавили лишнюю букву, символ или вообще случайно нажали Enter, просто человеческий фактор сработал и введенные данные оказались не корректными. То хотелось бы что бы предлагался повтороный ввод значения, каким образом можно это оформить?


    27 декабря 2017 г. 13:45
  • #Для выхода набрать quit
    while(!$user -and $usr -ne "quit") {
    	$usr = read-host "Enter username account in format 'domain\username'"
    	$user = $users | Where {$_.UserName -eq "$usr"}
    }

    • Помечено в качестве ответа ReMCatcheR 27 декабря 2017 г. 14:26
    27 декабря 2017 г. 14:01
    Отвечающий
  • Спасибо ))) сработало ))
    27 декабря 2017 г. 14:26
  • Я бы предложил явно указывать поставщика
    Get-Content -Path "FileSystem::\\corp.contoso.ru\NETLOGON\log.bat"
    а не надеется, что текущем поставщиком всегда будет файловая система.
    27 декабря 2017 г. 20:55