Archivio

Archive for maggio 2015

Aprire PowerShell dalla cartella corrente di esplora risorse

Spesso capita di voler eseguire dei cmdlets da una specifica cartella che tipicamente non è quella predefinita dell’utente. Come fare per raggiungere l’obbiettivo? Dobbiamo registrare una chiave nel registro di sistema ed impostare il valore che ci permetterà di ottenere il risultato.

image

L’hive che ci interessa è HKEY_CLASSES_ROOT. Come noto, però, in Powershell sono disponibili immediatamente solo i PSDrive per l’accesso agli hive HKEY_LOCAL_MACHINE (HKLM:) e HKEY_CURRENT_USER (HKCU:), quindi dovremo andare a registrare un nuovo PSDrive per poter accedere all’hive desiderato. Il provider “Registry” espone anche i seguenti hive:

  • HKEY_CLASSES_ROOT
  • HKEY_CURRENT_CONFIG
  • HKEY_USERS

Possiamo quindi utilizzare il cmdlet New-PSDrive per registrare le nuove posizioni, come mostrato nell’immagine.

image

image

New-PSDrive -PSProvider registry -Root HKEY_CLASSES_ROOT -Name HKCR 
New-PSDrive -PSProvider registry -Root HKEY_CURRENT_CONFIG -Name HKCC 
New-PSDrive -PSProvider registry -Root HKEY_USERS -Name HKUS

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

Dopo aver registrato il PSDrive HKEY_CLASSES_ROOT potremo andare a registrare le chiavi necessarie per ottenere il nostro risultato. Come noto il contenuto di questo hive è abbastanza corposo, a noi interessa la chiave Shell che si trova nella chiave Folder.

image

All’interno della chiave Shell dovremo andare a scrivere una nuova chiave (il cui nome sarà quello proposto nel menù contestuale di Explorer) ed una sottochiave; possiamo, per comodità, definire una variabile e cui associare tutto il percorso delle chiavi e quindi crearle:

   1:  $RegPath = "HKCR:\Folder\Shell\Open with PowerShell...\Command"
   2:  New-Item -Path $RegPath -Force

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

Va ricordato che il registro di sistema, come il file system e buona parte dei componenti/servizi/oggetti disponibili in Windows, è soggetto alla protezione e regolamentato con le ACL quindi accertatevi di disporre degli opportuni privilegi per la scrittura delle chiavi e dei valori!

A questo punto ci resta solo da registrare il nostro valore per indicare l’azione da compiere. Dovremo utilizzare il cmdlet New-ItemProperty come mostrato nel codice sotto indicato.

New-ItemProperty -Confirm -Path $RegPath -Name "(default)" `
  -Value "powershell.exe -noexit -nologo -mta -command cd -literalpath '%l%'"

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

Per chi non volesse copiare le righe d’esempio ho messo a disposizione uno script al seguente link: Abilitazione_PoSh_nel_menu_contestuale.ps1 .

Buon lavoro a tutti! Sorriso

%d blogger hanno fatto clic su Mi Piace per questo: