PowerShell Script, который запрашивает путь, экспортирует в CSV и добавляет в CSV, если повтор [дубликат]

Я думаю, что это должно сделать трюк. Я просто добавил if(isset и добавил конкатенацию к переменным в теле, чтобы отделить PHP от HTML.

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = 'contact@yoursite.com'; 
    $subject = 'Customer Inquiry';
    $body = "From:" .$name."\r\n E-Mail:" .$email."\r\n Message:\r\n" .$message;

if (isset($_POST['submit'])) 
{
    if (mail ($to, $subject, $body, $from)) 
    { 
        echo '<p>Your message has been sent!</p>';
    } 
    else 
    { 
        echo '<p>Something went wrong, go back and try again!</p>'; 
    }
}

?>
171
задан Peter Mortensen 9 March 2016 в 20:29
поделиться

4 ответа

Использование привязки параметров - определенно путь сюда. Это не только очень быстро писать (просто добавьте [Parameter(Mandatory=$true)] над вашими обязательными параметрами), но это также единственный вариант, который вы не будете ненавидеть позже.

Подробнее ниже:

[Console]::ReadLine явно запрещен правилами FxCop для PowerShell. Зачем? Поскольку он работает только в PowerShell.exe, а не в PowerShell ISE , PowerGUI и т. Д.

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

Вы пытаетесь задать параметры.

Вы должны использовать атрибут [Parameter(Mandatory=$true)] и правильную настройку, чтобы запросить параметры.

Если вы используете это на [SecureString], оно предложит ввести поле пароля. Если вы используете это в типе Credential, ([Management.Automation.PSCredential]), откроется диалоговое окно учетных данных, если параметр отсутствует. Строка станет просто старым текстовым полем. Если вы добавите HelpMessage в атрибут параметра (то есть [Parameter(Mandatory = $true, HelpMessage = 'New User Credentials')]), он станет справочным текстом для подсказки.

256
ответ дан Peter Mortensen 21 August 2018 в 02:29
поделиться
  • 1
    Спасибо, @ Rynant. Принятый ответ за то, что я единственный, кто ответил на мой главный вопрос! ;) Вся другая информация тоже очень полезна, тем более, что я все еще нащупываю свой путь в PS. – AJ. 23 November 2011 в 14:38
  • 2
    Нет проблем, @AJ. Другой способ получить информацию о методе - оставить круглые скобки. Я добавлю пример к моему ответу. – Rynant 23 November 2011 в 16:09
  • 3
    Это наиболее гибкое и удобное для пользователя решение, но я почти проигнорировал ваш совет, потому что не было четких примеров кода, например, в ответе Rynant's . Можете ли вы привести некоторые красиво отформатированные примеры? – Iain Samuel McLean Elder 22 October 2013 в 16:31
  • 4
    «Read-Host - это просто, плохая форма» ... если вы не используете его для условного принятия ввода, который был оставлен, потому что кто-то не вызывал ваш скрипт с ЛЮБЫМИ параметрами. БУМ. – user 26 August 2014 в 19:41
  • 5
    Нет: это все еще плохая форма. Вот почему вы отмечаете параметры как обязательные. – Start-Automating 2 September 2014 в 22:03
  • 6
    FYI вы также можете использовать Get-Credential, если вы получаете имена пользователей и пароли. – Matt Lyons 3 February 2015 в 05:07
  • 7
    Если вы хотите подтвердить операцию, тогда вы должны использовать .ShouldProcess («вещь») (вместе с [CmdletBinding (SupportsShouldProcess = $ true)]. Это позволяет вам делать -WhatIf, а также Yes / No to All. вы действительно хотите написать интерактивный скрипт, вы можете его приветствовать (черт возьми, я пишу WPF-платформу и веб-сайт в PSH, я пишу много интерактивных скриптов), но этот интерактивный скрипт должен вообще обернуть неинтерактивный PSH Плохое, которое пишет ваш уровень пользовательского интерфейса за счет вашего уровня автоматизации, является причиной того, что PowerShell существует. В команде PSH он называется «30-летняя дыра», – Start-Automating 18 March 2015 в 07:27
  • 8
    Я думаю, что user1499731 имел хорошую точку ... Есть моменты, когда вам нужно вводить данные от пользователя, который может быть только значимо предоставлен после некоторая информация отображается или выполняется другая операция. В этом случае вы не можете использовать параметр, и причины, приведенные здесь для Read-Host как «плохая форма», не применяются. Более того, .ShouldProcess() имеет ограничения, которые Read-Host не имеет, например, ограничивается несколькими ответами. Однако я согласен с тем, что .ShouldProcess() лучше, когда это применимо. – LarsH 19 February 2016 в 12:40
265
ответ дан Peter Mortensen 31 October 2018 в 21:39
поделиться

Поместите это в начало своего скрипта. Это заставит скрипт запросить у пользователя пароль. Полученный пароль можно затем использовать в другом месте вашего скрипта через $ pw .

   Param(
     [Parameter(Mandatory=$true, Position=0, HelpMessage="Password?")]
     [SecureString]$password
   )

   $pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))

Если вы хотите отлаживать и видеть значение пароля, которое вы только что прочитали, используйте:

   write-host $pw
13
ответ дан ANeves 21 August 2018 в 02:29
поделиться

В качестве альтернативы вы можете добавить его как параметр сценария для ввода как часть выполнения скрипта

 param(
      [Parameter(Mandatory = $True,valueFromPipeline=$true)][String] $value1,
      [Parameter(Mandatory = $True,valueFromPipeline=$true)][String] $value2
      )
3
ответ дан Maverick 21 August 2018 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: