sur les messages personnalisés PowerShell

voix
13

Je cherche différents exemples de Powershell custom promptimplémentations de fonction. Si vous avez une implémentation personnalisée de votre propre s'il vous plaît poster le script. Liens vers les ressources existantes sont bonnes aussi.

Les points bonus pour afficher une capture d'écran de ce que votre message ressemble vraiment (un aperçu).

Créé 27/08/2009 à 02:43
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
10

Ceci est une version modifiée de l'invite de jaykul. L'avantage est que

-Il y est un identifiant de l'histoire en cours, de sorte que vous pouvez invoquer des éléments précédents de l'histoire très facilement (vous savez l'id) -c'est un petit rappel - j'ajouter mes tâches à l'invite donc je ne les oublie pas (voir le sshot)

function prompt {
  $err = !$?
  $origOfs = $ofs;
  $ofs = "|"
  $toPrompt = "$($global:__PromptVars)"
  $ofs = $origOfs;
  if ($toPrompt.Length -gt 0) { 
    Write-Host "$($toPrompt) >" -ForegroundColor Green -NoNewline }

  $host.UI.RawUI.WindowTitle = "PS1 > " + $(get-location)

  # store the current color, and change the color of the prompt text
  $script:fg = $Host.UI.RawUI.ForegroundColor
  # If there's an error, set the prompt foreground to "Red"
  if($err) { $Host.UI.RawUI.ForegroundColor = 'Red' }
  else { $Host.UI.RawUI.ForegroundColor = 'Yellow' }

  # Make sure that Windows and .Net know where we are at all times
  [Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath

  # Determine what nesting level we are at (if any)
  $Nesting = "$([char]0xB7)" * $NestedPromptLevel

  # Generate PUSHD(push-location) Stack level string
  $Stack = "+" * (Get-Location -Stack).count

  # Put the ID of the command in, so we can get/invoke-history easier
  # eg: "r 4" will re-run the command that has [4]: in the prompt
  $nextCommandId = (Get-History -count 1).Id + 1
  # Output prompt string
  # Notice: no angle brackets, makes it easy to paste my buffer to the web
  Write-Host "[${Nesting}${nextCommandId}${Stack}]:" -NoNewLine

  # Set back the color
  $Host.UI.RawUI.ForegroundColor = $script:fg

  if ($toPrompt.Length -gt 0) { 
      $host.UI.RawUI.WindowTitle = "$($toPrompt) -- " + $host.UI.RawUI.WindowTitle
  }
  " "
}
function AddTo-Prompt($str) {
  if (!$global:__PromptVars) { $global:__PromptVars = @() }
  $global:__PromptVars += $str
}
function RemoveFrom-Prompt($str) {
  if ($global:__PromptVars) {
    $global:__PromptVars = @($global:__PromptVars | ? { $_ -notlike $str })
  }
}

sshot

Créé 27/08/2009 à 07:36
source utilisateur

voix
10

Voici ma fonction rapide

function prompt() {
    if ( Test-Wow64 ) {
        write-host -NoNewLine "Wow64 "
    }
    if ( Test-Admin ) { 
        write-host -NoNewLine -f red "Admin "
    }
    write-host -NoNewLine -ForegroundColor Green $(get-location)
    foreach ( $entry in (get-location -stack)) {
        write-host -NoNewLine -ForegroundColor Red '+';
    }
    write-host -NoNewLine -ForegroundColor Green '>'
    ' '
}
Créé 27/08/2009 à 02:46
source utilisateur

voix
8

Voici le mien :

function prompt {
   # our theme
   $cdelim = [ConsoleColor]::DarkCyan
   $chost = [ConsoleColor]::Green
   $cloc = [ConsoleColor]::Cyan

   write-host "$([char]0x0A7) " -n -f $cloc
   write-host ([net.dns]::GetHostName()) -n -f $chost
   write-host ' {' -n -f $cdelim
   write-host (shorten-path (pwd).Path) -n -f $cloc
   write-host '}' -n -f $cdelim
   return ' '
}

Il utilise cette fonction d'assistance:

function shorten-path([string] $path) {
   $loc = $path.Replace($HOME, '~')
   # remove prefix for UNC paths
   $loc = $loc -replace '^[^:]+::', ''
   # make path shorter like tabs in Vim,
   # handle paths starting with \\ and . correctly
   return ($loc -replace '\\(\.?)([^\\])[^\\]*(?=\\)','\$1$2')
}
Créé 27/08/2009 à 14:31
source utilisateur

voix
4

je l' utilise souvent comme snob calc, donc je mis $ variable ans. https://connect.microsoft.com/PowerShell/feedback/ViewFeedback.aspx?FeedbackID=386493

PS> 100
100
PS> $ ans * 9
900
PS> $ ans * ans de $
810 000

Créé 29/08/2009 à 17:54
source utilisateur

voix
1

Voici la mienne. Tout a l'ID d'histoire à chaque commande afin que je puisse facilement identifier l'ID de la commande. Je l'utilise aussi le windowtitle pour me donner le répertoire de travail courant plutôt que de l'avoir affiché dans l'invite lui-même.

106 >  cat function:\prompt

    $history = @(get-history)
    if($history.Count -gt 0)
{
        $lastItem = $history[$history.Count - 1]
        $lastId = $lastItem.Id
    }

    $nextCommand = $lastId + 1
    $Host.ui.rawui.windowtitle = "PS " + $(get-location)
    $myPrompt = "$nextCommand > "
    if ($NestedPromptLevel -gt 0) {$arrows = ">"*$NestedPromptLevel; $myPrompt = "PS-nested $arrows"}
    Write-Host ($myPrompt) -nonewline
    return " "

Une chose que beaucoup de gens oublient est de traiter dans demande personnalisée est l'invite imbriquée. Notez que je vérifie $ NestedPromptLevel et ajouter une flèche pour chaque niveau imbriqué.

Andy

Créé 15/09/2009 à 14:48
source utilisateur

voix
0

Je tends à retaper

function prompt { "PS> " }

chaque fois que je me prépare des exemples que je peux copier / coller à quelqu'un, surtout quand je suis dans de longs chemins encombrants qui ne distraient.

Et je prévois encore d'écrire une fonction rapide décente qui me montre le lecteur et une approximation utile sur l'emplacement soit en utilisant le répertoire courant (sans le chemin qui a conduit à là) ou (si elle est numérique) le niveau supérieur aussi. Mais c'est probablement assez spécifique à mon propre système de fichiers ici. Et je ne suis assez gêné par l'invite par défaut de le faire réellement :-)

Créé 27/08/2009 à 06:36
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more