JB155

              Я не хочу больше жить среди рыб. Я умру от тоски. 
              Зачем ты сделал из меня нечеловека?

              Человек-амфибия, 1961, 00:45:08

  
# ЗНАКОМСТВО С КОМАНДНЫМ ОКНОМ
  
Установить:

  Strawberry Perl (strawberryPerl.com for windows, 64-bit)
  gnuWin32: grep (googe: gnuwin32 grep, Complete package except sources)
  gnuWin32: ed (googe: gnuwin32 ed, Complete package except sources)
  gnuWin32: wget (googe: gnuwin32 wget, Complete package except sources)
  
Добавить путь [New]
или убедиться, что он существует [Edit]:

    Settings (Search: path)
    Search results:
  v Edit the system environment variables.
    Edit environment variables for your account.
    
    System Properties -> Advanced
      [ Environment variables ]
        
    Environment variables -> System variables
    PATH [ Edit ]
    C:\Program Files (x86)\GnuWin32\bin

Перезапустить PowerShell от имени Администратора:

  Right click on "Windows: Start"
    Windows Powershell (Admin)

Пройти к себе на рабочий стол:

  PS C:\WINDOWS\system32> cd \u<TAB>\opi<TAB>\De<TAB>
  --------видим---------  ---------набираем----------
  
либо

  PS C:\WINDOWS\system32> cd ~/de<TAB>
  --------видим---------  --набираем--

будет напечатано:

  PS C:\WINDOWS\system32> cd C:\Users\opilane\Desktop\

Нажав <ENTER> команда будет выполнена, shell ответит:

  PS C:\Users\opilane\Desktop>
  

# КОМАНДЫ, КОТОРЫЕ ДО'ЛЖНО ЗНАТЬ:

  ls        -- вывести список файлов в текущей папке

  cd <куда> -- перейти в папку <куда> 
  
    удобно помнить специальные сокращения для поля <куда>
    cd ..     -- перейти в родительскую папку
    cd ~      -- перейти в домашнюю папку (\Users\opilane\)
    cd /      -- перейти в головную папку на текущем диске (C:\)
    
  md <имя>         -- создать папку <имя>
  
  touch <имя.txt>  -- создать пустой файл <имя>
  
  echo "текст сообщения"  -- вывести "текст сообщения" на консоль
  
    echo "текст сообщения" > <имя>
    
      вывести "текст сообщения" в файл с именем <имя>, 
      где > означает     перенаправить вывод команды в <имя>
      
    echo "текст сообщения" | out-null
    
      перенаправить "текст сообщения" команде out-null 
      (терминатор, служит для подавления вывода)
      
ЗАМЕЧАНИЕ: Если чтение учебника займет слишком много времени, задайте вопрос любимому поисковику. Единственным противопоказанием может быть опасение "засветиться" на глупом вопросе (все запросы регистрируются). Чтож, выбирать вам -- остаться "незнайкой-невидимкой" или "стать видимым". (<< начало врезки)

<<
  Google: [ /dev/null in powershell ]

  Redirecting output to $null in PowerShell, 
  but ensuring the variable remains set

  ..

  I'd prefer this way to redirect standard output (native PowerShell)..

    ($foo = someFunction) | out-null

  But this works too:

    ($foo = someFunction) > $null
>> 

где >> означает : EOI -- end of inset, конец врезки.

  cat <имя>  -- вывести содержимое файла с именем <имя> на консоль

Замечание: Удобно искать введенные ранее команды передвигаясь по истории кнопками <стрелка_вверх> или <стрелка_вниз>

Запишем только что изученные команды в файл для выполнения. В powershell такие файлы называются скриптами и имеют расширение .ps1 (papa-sugar-one)

<<
  ALPHA, BRAVO, CHARLIE, DELTA, ECHO,  FOX,      GOLF,    HOTEL, 
  INDIA, JULIA, KILO,    LOVE,  MIKE,  NOVEMBER, OSCAR,   PAPA,  
  QUEEN, ROMEO, SUGAR,   TANGO, UNCLE, VICTOR,   WHISKEY, XRAY, 
  YOKE,  ZULU
>>

exercise.ps1

  cd ~
  pwd
  # Workaround
  Start-Sleep -Milliseconds 500
  mkdir -Force Exercise | Out-Null
  cd Exercise
  mkdir -Force One | Out-Null
  mkdir -Force Two | Out-Null
  cd One
  touch try_me
  echo "Try me now.." > try_me
  echo "Try me more.." >> try_me
  cd ../two
  mkdir -Force Three | Out-Null
  mkdir -Force Four | Out-Null
  cd ~/Exercise
  echo ' '
  tree
  echo ' '
  cat One/try_me
  cd ~

Пример выполнения скрипта:

  PS C:\WINDOWS\system32> .\ex.ps1

  Path
  ----
  C:\Users\opilane

  Folder PATH listing
  Volume serial number is B6BB-9E8E
  C:.
  ├───One
  └───Two
      ├───Four
      └───Three

  Try me now..
  Try me more..
  
  PS C:\Users\opilane>

Уничтожить содеянное можно командой:
 
  rm -Force -Recurse ~/exercise/
  
ЗАМЕЧАНИЕ: Paботает система локальной помощи по командам и их ключам, например

  PS> man rm
  
ЗАМЕЧАНИЕ: Экспериментировать со скриптами возможно, если применена небезопасная политика выполнения локальных скриптов:

  PS C:\WINDOWS\system32> Get-ExecutionPolicy
  RemoteSigned
  PS C:\WINDOWS\system32> Set-ExecutionPolicy Unrestricted
  
  
# ПРИЛОЖЕНИЕ А. Формат команды

  команда -ключ значение аргумент
  
  0. ключи могут отсутствовать  
  1. ключей может быть несколько. 
  2. Если ключ не указан, принимается его значение по умолчанию. 
  3. У ключа может отсутствовать значение true, по умолчанию false.
  4. значение ключа может рассматриваться как named argument value
  5. помимо именованных, аргументы бывают позиционные и опциональные.

Примеры:

  ls                # no keys, no arguments
  cat foo bar       # two arguments, second is optional
  mkdir -Force baz  # true, "baz"


# ПРИЛОЖЕНИЕ Б. Run C# code in PowerShell

PS> cat foo.ps1

  # Jim Andrakakis, November 2018
  # https://dandraka.com/2018/11/12/powershell-how-do-you-add-inline-c/
  #
  # Here goes the C# code:
  Add-Type -Language CSharp @"
  using System; 
  namespace DotJim.Powershell 
  {
      public static class Magician 
      {
          private static string spell = ""; 
          public static void DoMagic(string magicSpell) 
          {
              spell = magicSpell; 
          }
          public static string GetMagicSpells() 
          {
              return "Wingardium Leviosa\r\n" + spell; 
          }
      }
  }
  "@;
   
  # And here's how to call it:
  [DotJim.Powershell.Magician]::DoMagic("Expelliarmus")
  $spell = [DotJim.Powershell.Magician]::GetMagicSpells()
   
  Write-Host $spell

PS>
  
*) "Wingardium Leviosa" is compounded of the English word 'wing', 'arduus' which means proudly elevated, and 'levo' -- latin for rise up. "Expelliarmus" -- the disarming spell. This joins 'expello' (to disarm) with 'armus' (weaponry).

  https://graziadaily.co.uk/life/tv-and-film
    /heres-harry-potter-spells-actually-mean/
    
PS> cat sticky.ps1

  $assemblies=(
    "System"
  )

  $source=@"
  using System;
  namespace Helloworld
  {
    public static class Hello{
      public static void Main(){
        Console.WriteLine("Hello, world!");
      }
    }
  }
  "@

  Add-Type -ReferencedAssemblies $assemblies -TypeDefinition $source -Language CSharp

  [HelloWorld.Hello]::Main()

PS>


# ПРИЛОЖЕНИЕ В. кириллица в консоли

  https://stackoverflow.com/questions/49476326
    /displaying-unicode-in-powershell

The following magic incantation in Windows PowerShell does this (as stated, this implicitly performs chcp 65001):

  $OutputEncoding = [console]::InputEncoding = `
    [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
