Настройка приглашения PowerShell — эквивалент CMD $ M $ P $ _ $ + $ G?

Я начал «играть» с PowerShell и пытаюсь заставить его «вести себя».

Одна из вещей, которые я хотел бы сделать, — настроить PROMPT так, чтобы он был «похож» на то, что делает «$ M $ P $ _ $ + $ G» в MS-Dos:

Краткое изложение того, что они делают:

Персонаж | Описание
$ m Удаленное имя, связанное с текущей буквой диска или пустой строкой, если текущий диск не является сетевым.
$ p Текущий диск и путь
$ _ ENTER-LINEFEED
$ + Ноль или более знаков плюса (+ ) символов в зависимости от глубины стека каталогов pushd, по одному символу для каждого выдвинутого уровня
$ g> (знак больше)

Итак, окончательный результат будет примерно таким:

    \\spma1fp1\JARAVJ$ H:\temp
    ++>

Я смог добавить функции $M и $_ (и отличную функцию истории) в свою подсказку следующим образом:

function prompt
{
   ## Get the history. Since the history may be either empty,
   ## a single item or an array, the @() syntax ensures
   ## that PowerShell treats it as an array
   $history = @(get-history)


   ## If there are any items in the history, find out the
   ## Id of the final one.
   ## PowerShell defaults the $lastId variable to '0' if this
   ## code doesn't execute.
   if($history.Count -gt 0)
   {
      $lastItem = $history[$history.Count - 1]
      $lastId = $lastItem.Id
   }

   ## The command that we're currently entering on the prompt
   ## will be next in the history. Because of that, we'll
   ## take the last history Id and add one to it.
   $nextCommand = $lastId + 1

   ## Get the current location
   $currentDirectory = get-location

   ## Set the Windows Title to  the current location
   $host.ui.RawUI.WindowTitle = "PS: " + $currentDirectory

   ## And create a prompt that shows the command number,
   ## and current location
   "PS:$nextCommand $currentDirectory
>"
}

Но остальное мне еще не удалось скопировать ….

См. также:  Файл дампа ядра не создается после ошибки сегментации в macOS Big Sur

Большое спасибо за советы, которые обязательно придут!

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 5
  1. JJarava

    Посмотрите, делает ли это то, что вы хотите:

    function prompt
    {
       ## Get the history. Since the history may be either empty,
       ## a single item or an array, the @() syntax ensures
       ## that PowerShell treats it as an array
       $history = @(get-history)
    
    
       ## If there are any items in the history, find out the
       ## Id of the final one.
       ## PowerShell defaults the $lastId variable to '0' if this
       ## code doesn't execute.
       if($history.Count -gt 0)
       {
          $lastItem = $history[$history.Count - 1]
          $lastId = $lastItem.Id
       }
    
       ## The command that we're currently entering on the prompt
       ## will be next in the history. Because of that, we'll
       ## take the last history Id and add one to it.
       $nextCommand = $lastId + 1
    
       ## Get the current location
       $currentDirectory = get-location
    
       ## Set the Windows Title to  the current location
       $host.ui.RawUI.WindowTitle = "PS: " + $currentDirectory
    
       ##pushd info
       $pushdCount = $(get-location -stack).count
       $pushPrompt = ""
       for ($i=0; $i -lt $pushdCount; $i++)
       {
           $pushPrompt += "+"
        }
    
       ## And create a prompt that shows the command number,
       ## and current location
       "PS:$nextCommand $currentDirectory `n$($pushPrompt)>"
    }
    
  2. JJarava

    Это даст вам количество мест в стеке pushd:

    $(get-location -Stack).count
    
  3. JJarava

    Благодаря ответу EBGReens моя «подсказка» теперь может показывать глубину стека:

     function prompt
     {
        ## Initialize vars
        $depth_string = ""
    
        ## Get the Stack -Pushd count
        $depth = (get-location -Stack).count
    
        ## Create a string that has $depth plus signs
        $depth_string = "+" * $depth
    
        ## Get the history. Since the history may be either empty,
        ## a single item or an array, the @() syntax ensures
        ## that PowerShell treats it as an array
        $history = @(get-history)
    
    
        ## If there are any items in the history, find out the
        ## Id of the final one.
        ## PowerShell defaults the $lastId variable to '0' if this
        ## code doesn't execute.
        if($history.Count -gt 0)
        {
           $lastItem = $history[$history.Count - 1]
           $lastId = $lastItem.Id
        }
    
        ## The command that we're currently entering on the prompt
        ## will be next in the history. Because of that, we'll
        ## take the last history Id and add one to it.
        $nextCommand = $lastId + 1
    
        ## Get the current location
        $currentDirectory = get-location
    
        ## Set the Windows Title to  the current location
        $host.ui.RawUI.WindowTitle = "PS: " + $currentDirectory
    
        ## And create a prompt that shows the command number,
        ## and current location
        "PS:$nextCommand $currentDirectory `n$($depth_string)>"
     }
    

    Забыл про умножение струн. Хороший улов. Слишком много писем сегодня утром. :(. person JJarava; 01.10.2008

  4. JJarava

    Следующее даст вам эквивалент $ m.

    $mydrive = $pwd.Drive.Name + ":";
    $networkShare = (gwmi -class "Win32_MappedLogicalDisk" -filter "DeviceID = '$mydrive'");
    
    if ($networkShare -ne $null)
    {
        $networkPath = $networkShare.ProviderName
    }
    
  5. JJarava

    Благодаря советам в:

    в PowerShell , как я могу определить, является ли текущий диск подключенным к сети?
    В PowerShell, как я могу определить корень диска (предположим, что это сетевой диск)

    Мне удалось заставить его работать.

    Мой полный профиль:

    function prompt
    {
       ## Initialize vars
       $depth_string = ""
    
       ## Get the Stack -Pushd count
       $depth = (get-location -Stack).count
    
       ## Create a string that has $depth plus signs
       $depth_string = "+" * $depth
    
       ## Get the history. Since the history may be either empty,
       ## a single item or an array, the @() syntax ensures
       ## that PowerShell treats it as an array
       $history = @(get-history)
    
    
       ## If there are any items in the history, find out the
       ## Id of the final one.
       ## PowerShell defaults the $lastId variable to '0' if this
       ## code doesn't execute.
       if($history.Count -gt 0)
       {
          $lastItem = $history[$history.Count - 1]
          $lastId = $lastItem.Id
       }
    
       ## The command that we're currently entering on the prompt
       ## will be next in the history. Because of that, we'll
       ## take the last history Id and add one to it.
       $nextCommand = $lastId + 1
    
       ## Get the current location
       $currentDirectory = get-location
    
       ## Set the Windows Title to  the current location
       $host.ui.RawUI.WindowTitle = "PS: " + $currentDirectory
    
            ## Get the current location's DRIVE LETTER
            $drive = (get-item ($currentDirectory)).root.name
    
            ## Make sure we're using a path that is not already UNC
            if ($drive.IndexOf(":") -ne "-1")
                {
                    $root_dir = (get-wmiobject Win32_LogicalDisk | ? {$_.deviceid -eq $drive.Trim("\") } | % { $_.providername })+" "
              }
              else
              {
                $root_dir=""
              }
    
    
       ## And create a prompt that shows the command number,
       ## and current location
       "PS:$nextCommand $root_dir$currentDirectory `n$($depth_string)>"
    }
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: