výzvy Custom PowerShell

hlasů
13

Sháním různé příklady zakázkové PowerShell promptimplementací funkcí. Máte-li vlastní realizaci vlastní prosím post skript. Odkazy na stávajících zdrojů jsou dobré.

Bonusové body za vysílání snímek, jaké jsou vaše výzvy vlastně vypadá (náhled).

Položena 27/08/2009 v 02:43
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
10

To je modifikovaná verze řádku jaykul je. Výhodou je, že

-Je proud historie id, takže si můžete vyvolat předchozí položky z historie velmi snadno (znáte id) -je to trochu připomínka - mohu přidat mé úkoly do příkazového řádku, takže nemám na ně zapomenout (viz 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

Odpovězeno 27/08/2009 v 07:36
zdroj uživatelem

hlasů
10

Tady je moje výzva funkce

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 '>'
    ' '
}
Odpovězeno 27/08/2009 v 02:46
zdroj uživatelem

hlasů
8

Tady je moje :

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 ' '
}

Používá tuto pomocnou funkci:

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')
}
Odpovězeno 27/08/2009 v 14:31
zdroj uživatelem

hlasů
4

i často používají posh jako calc, tak i nastavit $ ans proměnná. https://connect.microsoft.com/PowerShell/feedback/ViewFeedback.aspx?FeedbackID=386493

PS> 100
100
PS> $ ans * 9
900
PS> $ ans * $ ans
810000

Odpovězeno 29/08/2009 v 17:54
zdroj uživatelem

hlasů
1

Tady je moje. Jen má historii ID u každého příkazu, abych mohl snadno identifikovat ID příkazu. Já také použít windowtitle, aby mi aktuální pracovní adresář, spíše než mít to zobrazeno v řádku sám.

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 " "

Jedna věc, že ​​mnoho lidí zapomíná, je zabývat se do vlastního vyzve je vnořená výzva. Všimněte si, že jsem se kontrolovat $ nestedPromptLevel a přidejte šipky pro každý vnořené úrovni.

Andy

Odpovězeno 15/09/2009 v 14:48
zdroj uživatelem

hlasů
0

Mám sklon k re-type

function prompt { "PS> " }

pokaždé, když se připravuji příkladů mohu kopírovat / vložit na někoho, zvláště když jsem v těžkopádných dlouhých drahách, které by odvrátit pouze.

A pořád v plánu psát slušnou řádku funkce, která mi ukazuje jednotku a užitečnou aproximaci o umístění buď pomocí aktuálního adresáře (bez cesty, která vedla k existuje), nebo (pokud je to číselná hodnota) další vyšší úroveň příliš. Ale to je asi dost specifické pro své vlastní souborový systém zde. A nikdy jsem se neobtěžoval dost implicitním řádku ve skutečnosti to :-)

Odpovězeno 27/08/2009 v 06:36
zdroj uživatelem

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