martedì 26 maggio 2020

Errore quando si cerca di cambiare la password ad un managed account in Sharepoint

Il problema in questione ha più soluzioni come indicato qui. Ma in realtà e di solito ve ne accorgete quando dovete creare una nuova Web Application, semplicemente avete cambiato la password dell'utente su AD e vi siete 'scordati' di cambiarla in Sharepoint. L'unico modo veramente sicuro di cambiarla è di scegliere l'opzione 'Use Existing Password' e reinserire la password AD dell'utente, sia da Central Administration che da Powershell


Set-SPManagedAccount -identity "MYDOMAIN\MYUSER" 
-ExistingPassword (Convertto-Securestring "MYPASSWORD" -AsPlainText -Force)

martedì 19 maggio 2020

Convertire una virtual machine VMWare in Hyper-V

Il metodo descritto qui si applica ad una virtual machine che risiede fisicamente sul nostro PC. Il procedimento è abbastanza semplice.

1) Prima di tutto scaricate ed installate Microsoft Virtual Machine Converter 3.0. Questo tool (di cui trovate un esauriente tutorial qui) mette a disposizione delle nuove cmdlet powershell

2) Aprite una finestra powerhell con diritti di Amministratore ed eseguite i seguenti comandi

Import-Module ‘C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1’
ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath “C:\miodisco.vmdk” -DestinationLiteralPath “C:\miodisco.vhd” -VhdType FixedHardDisk -VhdFormat Vhd

Per una VM di tipo "Generation 2" con supporto UEFI, utilizzare la riga di comando qui sotto

ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath “C:\miodisco.vmdk” -DestinationLiteralPath “C:\miodisco.vhdx” -VhdType DynamicHardDisk -VhdFormat Vhdx

3) E qui si presenta subito un problema. L'esecuzione di questo comando quasi sempre risulta in un errore del tipo "ConvertTo-MvmcVirtualHardDisk : The entry 1 is not a supported disk database entry for the descriptor"

4) Sostanzialmente l'errore di cui al punto 3 indica che il descrittore del disco in formato vmWare NON è compatibile con Hyper-V. Per ovviare a questo problema (un tutorial più completo si può trovare qui) si può utilizzare un tool denominato dsfok che estrae e reinserisce il decrittore del disco vmWare. Una volta installato eseguite il seguente comando

dsfo.exe "C:\miodisco.vmdk" 512 1024 "C:\descriptor.txt"

Il file estratto ha un formato come quello mostrato qui sotto. Vanno commentate, preponendo il simbolo '#', le righe che danno errore al di sotto del rigo "#DDB" (nel mio caso tutte)

# Disk DescriptorFile
version=1
encoding="UTF-8"
CID=e52f6c81
parentCID=ffffffff
createType="monolithicSparse"

# Extent description
RW 524288000 SPARSE "SharePoint 2013.vmdk"

# The Disk Data Base
#DDB

ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "32636"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "952846014b76d094654aa2b5e52f6c81"
ddb.toolsInstallType = "1"

ddb.toolsVersion = "10309"

Dopo le modifiche eseguite il seguente comando

dsfi.exe "C:\miodisco.vmdk" 512 1024 "C:\descriptor.txt"

e rieseguite il comando al punto 2.

5) A questo punto aprite Hyper-v Manager e create una nuova virtual machine. 
Quando arrivate al passaggio "Connetti disco rigido virtuale", scegliete l'opzione "Usa un disco rigido virtuale esistente" e cercate il file VHD appena creato.

6) Fate partire la vostra virtual machine e controllate che tutto sia andato bene


martedì 12 maggio 2020

Come creare dinamicamente un array JSON in typeScript

Il codice è mostrato qui sotto. L'array jsonFields può essere creato dinamicamente se non si conoscono a priori i nomi dei campi (per esempio se si converte il risultato di una chiamata ad un web service).

 let jsonData: any = [];
 //QUESTO ARRAY PUO' ESSERE DINAMICO 
 let jsonFields: string[] = ["Field1","Field2","Field3"]; 
               
        listaDiDatiDaTrasformareinJSON.forEach(
            (row) => {
                let arrayIndex: number = 0;
                let jsonItem: any = {};
                row.forEach(
                    (field) => {
                        let fieldName = jsonFields[arrayIndex];
                        jsonItem[fieldName] = field;
                        arrayIndex++;
                    }
                )
                jsonData.push(jsonItem);
            }
        );