none
Вопросы по скриптам powershell RRS feed

  • Вопрос

  • Доброго дня. Скопилось несколько вопросов, может кто разъяснит?

    1. 

    $c = New-Object System.Management.Automation.PSCredential("login" , (ConvertTo-SecureString "pass" -AsPlainText -Force))
    $xx = @{
                To          = "dom@dom.ru"
                From        = "test@test.ru"
                Subject     = "bla"
                Body        = "t"
                BodyAsHtml  = $True
                SMTPServer  = "mail.dom.ru"
                Credential = $c
            }
    Send-MailMessage @xx
    такое отрабатывает, а такое нет
    $t = @{
        Name = "powershell"
        ComputerName = "test.dom.ru"
    }

    Get-Process $t
    2. Почему при
    ... convertfrom-json | foreach-object {
    $_
    }

    вывод происходит сразу всех значений, а не поочередно. Спасает foreach ($a in $b){}, но с CSV файлами работает и первый вариант.
    3. В  случае с foreach или foreach-object не выполняется Get-ADUser -Properties msExchMasterAccountSid -filter {msExchMasterAccountSid -eq $_.paramname}, приходится предварительно прописывать в отдельную переменную.

    4. В $out хэш-таблица
    $body = ConvertTo-Html -Body ($out | ConvertTo-HTML -as Table -Fragment | Out-String) -Head $head | Out-String
    при отправке этого письмом -BodyAsHtml, в теле возникает еще пустая таблица, которую приходится убирать методом replace. 

    Спасибо


    • Изменено JabBaton 13 апреля 2017 г. 13:37
    13 апреля 2017 г. 13:34

Ответы

  • 1. Синтаксис @Variable ,а не $Variable
    $t = @{    
    Name = "powershell"    
    ComputerName = "test.dom.ru"
    }
    Get-Process @t

    2. Вопрос непонятен

    3. Использовать двойные кавычки, вместо {} , потому что filter принимает аргумент типа String
    Get-ADUser -Properties msExchMasterAccountSid -filter "msExchMasterAccountSid -eq '$($_.paramname)'"
    4. Полностью код привести, а не обрывки

    • Изменено KazunEditor 13 апреля 2017 г. 13:44
    • Помечено в качестве ответа KazunEditor 19 апреля 2017 г. 7:49
    13 апреля 2017 г. 13:41
    Отвечающий
  • 1 @t

    2 $(... | ConvertFrom-Json) | foreach ...


    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 13 апреля 2017 г. 13:52
    • Помечено в качестве ответа KazunEditor 19 апреля 2017 г. 7:49
    13 апреля 2017 г. 13:45
    Модератор

Все ответы

  • 1. Синтаксис @Variable ,а не $Variable
    $t = @{    
    Name = "powershell"    
    ComputerName = "test.dom.ru"
    }
    Get-Process @t

    2. Вопрос непонятен

    3. Использовать двойные кавычки, вместо {} , потому что filter принимает аргумент типа String
    Get-ADUser -Properties msExchMasterAccountSid -filter "msExchMasterAccountSid -eq '$($_.paramname)'"
    4. Полностью код привести, а не обрывки

    • Изменено KazunEditor 13 апреля 2017 г. 13:44
    • Помечено в качестве ответа KazunEditor 19 апреля 2017 г. 7:49
    13 апреля 2017 г. 13:41
    Отвечающий
  • 1 @t

    2 $(... | ConvertFrom-Json) | foreach ...


    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 13 апреля 2017 г. 13:52
    • Помечено в качестве ответа KazunEditor 19 апреля 2017 г. 7:49
    13 апреля 2017 г. 13:45
    Модератор
  • 1. простите мне мою невнимательность

    2. ответ получен

    3. проверю, спасибо!

    4. 

    $x = @{
        a="a"
        b="b"
    }
    $head = @'
    <style>
    body { background-color:white;
               font-family:Calibri;
               font-size:11pt; }
    td, th { border:1px solid black;
               border-collapse:collapse; }
    th { color:white;
               background-color:black; }
    table, tr, td, th { padding: 2px; margin: 0px }
    table { margin-left:0px;}
    </style>
    '@
    $body = ConvertTo-Html -Body ($x | ConvertTo-HTML -as Table -Fragment | Out-String) -head $head | Out-String
    $c = New-Object System.Management.Automation.PSCredential("login" , (ConvertTo-SecureString "pass" -AsPlainText -Force))
    Send-MailMessage -From -To -SmtpServer -Subject -Credential $c -Encoding UTF8 -Body $body -BodyAsHtml
    • Изменено JabBaton 13 апреля 2017 г. 13:56
    13 апреля 2017 г. 13:55
  • 2. объяснение этому какое-то есть?) пытаюсь понять, но что-то трудно идет.

    Спасибо

    13 апреля 2017 г. 13:57
  • 3. (Get-Content $json -Encoding UTF8 | ConvertFrom-Json) | ForEach-Object {
        Get-ADUser -Properties msExchMasterAccountSid -filter "msExchMasterAccountSid -eq $($_.sid)"
    }

    Get-ADUser : Error parsing query: 'msExchMasterAccountSid -eq S-1-5-21-1982472379-4140420-3051998138-6004' Error Message: 'syntax error' at position: '28'.
    At line:4 char:5
    +     Get-ADUser -Properties msExchMasterAccountSid -filter "msExchMast ...

    13 апреля 2017 г. 14:00
  • Все равно, нет четких данных.

    $body = $x |  ConvertTo-Html -head $head | Out-String

    Научиться копировать, тоже было бы неплохо.

    3.

    (Get-Content $json -Encoding UTF8 | ConvertFrom-Json) | ForEach-Object { Get-ADUser -Properties msExchMasterAccountSid -filter "msExchMasterAccountSid -eq '$($_.sid)'" }


    • Изменено KazunEditor 13 апреля 2017 г. 14:04
    13 апреля 2017 г. 14:02
    Отвечающий
  • содержимое переменной $body перед отправкой 

    PS C:\_PSScripts\New_Mailbox> $body
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <style>
    body { background-color:white;
               font-family:Calibri;
               font-size:11pt; }
    td, th { border:1px solid black;
               border-collapse:collapse; }
    th { color:white;
               background-color:black; }
    table, tr, td, th { padding: 2px; margin: 0px }
    table { margin-left:0px;}
    </style>
    </head><body>
    <table>
    <colgroup><col/><col/><col/><col/><col/><col/><col/></colgroup>
    <tr><th>IsReadOnly</th><th>IsFixedSize</th><th>IsSynchronized</th><th>Keys</th><th>Values</th><th>SyncRoot</th><th>Count</th></tr>
    <tr><td>False</td><td>False</td><td>False</td><td>System.Collections.Hashtable+KeyCollection</td><td>System.Collections.Hashtable+ValueCollection</td><td>Syste
    m.Object</td><td>2</td></tr>
    </table>
    
    <table>
    </table>
    </body></html>


    • Изменено JabBaton 13 апреля 2017 г. 14:04
    13 апреля 2017 г. 14:04
  • $body = $x |  ConvertTo-Html -head $head | Out-String

    Будет  без доп. $table:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <style>
    body { background-color:white;
               font-family:Calibri;
               font-size:11pt; }
    td, th { border:1px solid black;
               border-collapse:collapse; }
    th { color:white;
               background-color:black; }
    table, tr, td, th { padding: 2px; margin: 0px }
    table { margin-left:0px;}
    </style>
    </head><body>
    <table>
    <colgroup><col/><col/><col/><col/><col/><col/><col/></colgroup>
    <tr><th>IsReadOnly</th><th>IsFixedSize</th><th>IsSynchronized</th><th>Keys</th><th>Values</th><th>SyncRoot</th><th>Count</th></tr>
    <tr><td>False</td><td>False</td><td>False</td><td>System.Collections.Hashtable+KeyCollection</td><td>System.Collections.Hashtable+ValueCollection</td><td>System.Object</td><td>2</td></tr
    >
    </table>
    </body></html>

    • Изменено KazunEditor 13 апреля 2017 г. 14:08
    13 апреля 2017 г. 14:07
    Отвечающий
  • 3. пардон, невнимателен. надо на сегодня завязывать. спасибо
    13 апреля 2017 г. 14:11
  • 2. объяснение этому какое-то есть?) пытаюсь понять, но что-то трудно идет.

    Спасибо

    Подозреваю что ConvertFrom-Json работает с процессом, это выглядит следующим образом - командлет получает 1 элемент и отдает один эленет, Foreach же в свою очередь на вход хочет получить не один элемент а массив который будет перебирать в таком случае вы можете либо засунуть эту конструкцию в переменную либо использовать $({Ваш скрипт}) для создания неименованной переменной

    The opinion expressed by me is not an official position of Microsoft

    13 апреля 2017 г. 14:31
    Модератор