-
e magari anche per altri che vogliono trovare un punto di appoggio in italiano, ecco che è nato http://www.powershell.it/
Buona fortuna,
-
La risposta breve è sì.
Penso sia più interessante però saperne qualcosa di più.
È usato da "gruppuscoli" minoritari?
No. Ad esempio è usato praticamente da tutti i gruppi che sviluppano il Framework .Net, Visual Studio e Team Foundation Server.
È usato per tutti gli sviluppi Microsoft.
No: il passaggio non è così immediato e indolore considerando che stiamo parlando di migliaia di sviluppatori e milioni di righe di codice. In altri grossi gruppi, come quelli preposti a SQL Server, Office e Windows la transizione è ancora in corso e durerà ancora parecchio.
Dobbiamo capire che il grado di automazione del processo di sviluppo è molto avanzato e bisogna fare i conti con gli strumenti già in essere: bisogna migrare dai repository di codice sorgente esistenti, avere una visione complessiva delle attività tracciate in strumenti diversi, modificare gli script di build, eccetera. Qualcuno è molto avanti, come il gruppo di SQL, altri più indietro.
Ma quanto è usato allora?
Concretamente si è arrivati a oltre 1300 progetti TFS, con più di 8400 utenti attivi e 8800 build al mese (quasi 300 al giorno!), per un totale di 27 milioni di file ripartiti tra 20 diverse istanze di TFS.
Naturalmente l'infrastruttura non è composta solamente da un paio di "serverini a lama" ;-)
Immagino vi siano molte altre domande cui rispondere, ma per oggi ho finito il tempo.
-
C'è un piccolo gioiello in Visual Studio C++ 2005 ed è il Manifest tool (mt). Qualcuno avrà letto degli articoli come Registration-Free Activation of COM Components: A Walkthrough che spiegano che da Windows XP è possibile utilizzare una componente COM "privata" alla mia applicazione senza bisogno di registrarla.
Per questo si devono compilare dei file manifest che contengano le informazioni normalmente scritte da una componente nel registry al momento della propria registrazione. Questi file son semplici concettualmente (banali per chi ha mai dovuto ripulirsi il registry a mano) ma è improponibile riempirli a mano per una componente che abbia più di una manciata di classi e di interfacce.
Visual Studio C++ 2005 ha una simpatica opzione per creare in automatico il file manifest durante la build del progetto di una componente COM, tra le proprietà del progetto, sotto Configuration Properties / Manifest tool / Isolated COM e questo va bene se ho i sorgenti della componente COM.
Quello che non ho trovato facilmente nella documentazione o nei forum è la risposta alla domanda: se ho una componente COM già realizzata, come faccio a generare il manifest?
Se ne ho la TLB (tipicamente è inclusa nelle risorse della DLL) bastano tre parametri ad MT, ad esempio:
mt -tlb:SomeCom.dll -dll:SomeCom.dll -out:SomeCom.X.manifest
Il manifest così prodotto manca solo di un passo, aggiungere come l'elemento assemblyIdentity, come in questo esempio.
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="SomeCom.X"
version="1.0.0.0" />
<file name = "SideBySide.dll">
<!-- contenuto generato da MT -->
</file>
<comInterfaceExternalProxyStub >
<!-- contenuto generato da MT -->
</comInterfaceExternalProxyStub>
</assembly>
Adesso per usare le classi contenute nella componente COM dovremo solo creare un manifest per il programma chiamante, qualcosa del tipo:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32"
name="myOrganization.myDivision.myApp"
version="1.0.0.0"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32"
name="SomeCom.X"
version="1.0.0.0"
/>
</dependentAssembly>
</dependency>
</assembly>
A questo punto potete cominciare a dimenticarvi di regsvr32.
-
Venerdì sera son andato all'incontro (http://www.xedotnet.org/48/section.aspx/282) dello User Group locale.
Cos'è uno User Group? In breve è un gruppo di persone, tipicamente riunito in una assocazione no-profit per scambiare esperienze e diffondere informazioni su un tema particolare, nel caso il Microsoft .NET Framework. Non si parla solo di nostri prodotti ma anche di altre iniziative, ad esempio DotNetNuke o NHibernate. Il momento di maggior valore è lo scambio di domande e di opinioni che va oltre la classica presentazione.
Ho una curiosità, dalla constatazione di una speciale enfasi sullo sviluppo web. E' il riflesso della realta regionale, o una caratterizzazione del gruppo?
Che altro dire... che ho constatato la professionalità e la qualità degli interventi e chi può partecipi ai prossimi incontri!
-
Stamattina leggevo il post di Sudano (http://blogs.ugidotnet.org/janky/archive/2007/11/11/teched-speaker-profile-rafal-lukawiecki.aspx) sulla sessione di Lukawiecki e mi ha ricordato della bravura di quest'uomo.
Durante un TechEd (credo del 2003), andai ad un Chalk Talk tenuto da Lukawiecki (mi pare il tema fosse sulle metodologie di sviluppo del software) e rimasi impressionato.
Non aveva lucidi pronti ma solamente un blocco gigante, di quelli con i fogli formato poster, e un pennarello. Dopo 15 minuti di introduzione è passato alle domande del pubblico... e ha tenuto un filo logico senza saltellare da un tema ad un altro! E a nessuno era permesso di porre più di una domanda alla volta, ma doveva attendere la conclusione del giro.
Così non mi stupii di scoprire che era uno dei migliori in circolazione... da non perdere anche se l'argomento non pare interessarvi.
-
La domanda del cliente pareva banale, ma ho faticato un po' a capire quale fosse la strada più agevole e con meno dipendenze per creare uno shortcut, così alla fine son arrivato a questo.
Nel progetto si aggiunge una reference alla libreria COM "Microsoft Shell Control And Automation" or direttamente a SHELL32.DLL.
// startup shortcut
string linkDir = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
string linkFilename = "MyNotepad.lnk";
string linkPath = Path.Combine(linkDir, linkFilename);
// create dummy shortcut so getting the ShellLinkObject succeeds
File.Create(linkPath).Close();
Shell shell = new ShellClass();
Folder folder = shell.NameSpace(linkDir);
FolderItem item = folder.Items().Item(linkFilename);
ShellLinkObject link = (ShellLinkObject)item.GetLink;
// now set shortcut properties as you like
string sysPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
string targetPath = Path.Combine(sysPath, "notepad.exe");
link.Path = targetPath;
link.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
link.Description = "My Notepad shortcut";
string iconPath = Path.Combine(sysPath, "moricons.dll");
link.SetIconLocation(iconPath, 1); link.Save(linkPath);
Ho impostato alcune proprietà giusto per divertimento.
Nello specifico ero interessato a far partire in modo automatico un programma al logon e l'uso dello shortcut non da' i problemi associati alle chiave di registry tipo la HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run. L'MSDN specifica infatti:
A program run from any of these keys should not write to the key during its execution.
mentre invece l'obiettivo è che il programma, una volta lanciato, controlli se è impostato per partire in modo automatico.
[Aggiornato il 19/11/2007: Corretta la formattazione così da rendere leggibile il codice]
-
Come consulente devo seguire più progetti su clienti diversi, ognuno dei quali ha una configurazione (rete, server, stampanti) diversa. Nel listato che segue ho riprodotto uno schema di script da usare per riconfigurare il portatile.
1: @echo off
2: echo Cliente - Sede
3: pushd
4: setlocal
5:
6: ECHO interface ip > "%temp%\z.netsh"
7: ECHO set address "Local Area Connection" static 192.168.0.123 255.255.255.0 192.168.0.160 3 >> "%temp%\z.netsh"
8: ECHO set dns "Local Area Connection" static 192.168.0.162 >> "%temp%\z.netsh"
9: ECHO add dns "Local Area Connection" 192.168.0.163 >> "%temp%\z.netsh"
10: netsh -f "%temp%\z.netsh"
11:
12: route add 192.168.99.200 mask 255.255.255.255 192.168.0.254
13:
14: set LAN_USR1=DOMINIO\utente
15: set LAN_PWD1=password
16:
17: net use /delete /y *
18:
19: echo Internet Proxy
20: net use \\proxy\IPC$ %LAN_PWD1% /USER:%LAN_USR1%
21:
22: echo Network Shares
23: net use Q: \\server\share %LAN_PWD1% /USER:%LAN_USR1%
24:
25: echo Set Default Printer
26: RunDll32.EXE printui.dll,PrintUIEntry /y /n "nome stampante"
27:
28: echo Setting proxy
29: ECHO Windows Registry Editor Version 5.00 > "%temp%\z.reg"
30: ECHO [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] >> "%temp%\z.reg"
31: ECHO "ProxyEnable"=dword:00000001 >> "%temp%\z.reg"
32: ECHO "ProxyServer"="proxy:port" >> "%temp%\z.reg"
33: reg import "%temp%\z.reg"
34:
35: endlocal
36: popd
Come si vede c'è un unico file che contiene tutti i dati necessari. I passi principali sono:
- impostazione di indirizzi di rete fissi, gateway, DNS, ecc (righe 6-12)
- aggancio di share di rete e autenticazioni varie(righe 17-23)
- impostazione della stampante di default (riga 26)
- impostazione del proxy per l'accesso a Internet (righe 29-33)
Manca solo un passo ed è di agganciare il riconoscimento automatico della rete di Vista

all'esecuzione dello script!
-
Carl Franklin ha messo in piedi un video demo ad alta definizione (1280x720 29 frames al secondo) con Silverlight http://perseus.franklins.net/homeatlast/. Un modo gradevole di capire le potenzialità di Silverlight.
Un avviso se vedete che l'audio non è sincronizzato con il video, vuol dire che il client non ce la fa; ad esempio il mio notebook con un Turion va' a scatti, mentre sul mio PC di casa con Athlon 64 3500 e ATI Radeon X300 è perfetto.
-
Somasegar in questo post della scorsa settimana pubblicizza F# e lo pensa come un lingaggio di prima classe (In my mind, F# is another first-class programming language on the CLR). In realtà F# possiede già un notevole livello di integrazione con VS2005, provare per credere! Project template, editor integrato, debugger...
...le mie reminiscenze di Lisp stanno riemergendo...
-
A Redmond (località vicina a Seattle dove si trova la sede centrale di Microsoft) c'è un discreto gruppo di italiani, così che abbiamo la fortuna di avere una nuova serie di filmati e registrazioni in italiano direttamente dall'America! Guardate qui.
-
Può trovare qui una ricca guida.
Per chi non lo sapesse Silverlight è il nome ufficiale di WPF/E, la nuove piattaforma per creare applicazioni web interattive.
-
Riprendiamo il tema PowerShell e vediamo alcuni esempi chiassosi, roba da poche righe ma d'effetto.
|
Start-Transcript -Path c:\temp\transcript.ps1 |
Genera uno script con i comandi che via via si digitano interattivamente.
|
$user = [ADSI]"WinNT://./Administrator,user"
$user.description |
Legge la descrizione dell'utente Administrator mediante ADSI.
GB e MB son unità di misura predefinite… purtroppo solo queste.
|
([DateTime]::Now - ([DateTime]"1964-11-24")).Days |
Quanti giorni ho oggi?
|
dir -include *.vbs, *.ps1, *.bat -recurse | Group-Object extension –noelement |
Quanti file con script di comando (cioè VBS, PS1 e BAT) ho?
|
(dir | where {$_.name -like '*.docx'}).count |
Quanti file DOCX ci sono in questa cartella?
|
Get-WmiObject IisWebService -namespace "root\MicrosoftIISv2" |
L'oggetto WMI che rappresenta IIS.
|
Get-ChildItem | Measure-Object -property length -sum -max -min –average |
Dimensione dei file nella cartella: compresa somma, minimo, massimo e media.
|
$rssUrl = "http://blogs.msdn.com/giuliov/rss.aspx"
$blog = [xml](new-object System.Net.WebClient).DownloadString($rssUrl)
$blog.rss.channel.item | select title -first 8 |
Gli 8 post più recenti del mio blog.
|
$url = "http://files.skyscrapr.net/users/arcast/ARCast20061113-ScottGu.mp3"
$file = "D:\Downloads\PodCast\ARCast - Scott Guthrie - the man, the myth, the legend.mp3"
$clnt = new-object System.Net.WebClient
$clnt.DownloadFile($url,$file) |
Scarica un file da Internet.
|
gc test.txt | Measure-Object -Character -Word –Line |
Word count (wc) sul file test.txt!
|
cd "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
New-ItemProperty -Path . -Name ProxyEnable -PropertyType DWord -Value 0 –Force |
Disabilita il proxy per Internet Explorer modificando il registry.
|
cd "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
New-ItemProperty -Path . -Name ProxyEnable -PropertyType DWord -Value 1 -Force
New-ItemProperty -Path . -Name ProxyServer -PropertyType String -Value "myproxy:80" -Force
New-ItemProperty -Path . -Name ProxyOverride -PropertyType String -Value "*.local;<local>" –Force |
Definisce un proxy per Internet Explorer, sempre agendo sul registry.
Scambia il valore di due variabili (swap).
|
@"
quiet 0 25
normal 26 50
loud 51 75
noisy 75 100
"@ > data.txt
$data = Get-Content data.txt | foreach {
$e=@{}
$e.level, [int] $e.lower, [int] $e.upper = $_.split()
$e
} |
Costruisce un dizionario di intervalli.
|
($data | where { ($_.lower -lt 50) -and ($_.upper -ge 50) }).level |
Uso del dizionario per vedere in che intervallo cade il valore 50.
Prende l'ultimo elemento del vettore (-2 è il penultimo, ecc.).
|
$prop = "length"; "Hello world".$prop |
Richiamo di una proprietà per nome.
|
# capture the output objects in $output and the error objects in $error
$error = $( $output = myScript ) 2>&1 |
Come catturare in due variabili sia gli oggetti di output che quelli di errore.
|
myScript > file.txt
# syntactic sugar for
myScript | Out-File –path file.txt |
La redirezione dell'output è in effetti un uso convenzionale della pipeline.
|
$id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$p = New-Object System.Security.Principal.WindowsPrincipal($id)
if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
{
$Host.UI.RawUI.WindowTitle = "Administrator: " + $Host.UI.RawUI.WindowTitle
} |
Cambia il titolo della console per indicare se sta girando con i privilegi amministrativi (utile se inserito nel profile script, ad es. Microsoft.PowerShell_profile.ps1).
|
# disable UAC
cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies
Set-ItemProperty -Path . -Name ConsentPromptBehaviorAdmin -Value 0 |
Disabilita UAC… ovviamente se la shell PS sta girando con i privilegi amministrativi.
|
Remove-Item Alias:dir
function dir {cmd /c dir $args} |
Ripristinare il comando dir originale di CMD.EXE rimuovendo l'alias di PS che esegue il cmdlet Get-ChildItem.
-
Ovvero non si chiamerà più PDC07 ma PDC08 (o 09 o che ne so io).
Parlo della Professional Developer Conference, l'evento internazionale di maggior nota per gli sviluppatori su piattaforma MS.
Notizia qui.
Io comunque avrò la mia dose d'America quest'estate (materia per scrivere in futuro).
-
http://blogs.msdn.com/pathelland/archive/2007/05/14/i-m-glad-to-be-back.aspx
La cosa incredibile è che te ne accorgi dopo giorni, cercando tutt'altro. Spero che rientri nel giro degli eventi (TechEd, PDC, ecc.)
-
E' uscita una nuova guida da patterns & practices per TFS. Non so se avrò il tempo di leggerla ma è sicuramente utile per consultazione. p&p sta producendo parecchio materiale per TFS in attesa che arrivino le nuove versioni.
Quello che ho scoperto personalmente si deve seguire alla lettera le istruzioni della Team Foundation Installation Guide; cercate di usare gli answer file (adattandoli) e di lanciare i setup dalla riga di comando per quanto possibile.
Gli esperti TFS son comunque altri: Barbieri (MVP) e Pica (MS) e altri.
stavolta però son arrivato 1