CMD to PS formatting help. Netapp install.

I need to run this command in powershell and I’ve tried numerous different ways. I believe PS has an issue with the quotes although it doesn’t throw an error.

snapdrive7.0.exe /s /v"/qn SILENT_MODE=1 /Li SDInstall.log LPSM_SERIALNUMBER=serialnumber INSTALLDIR="c:\Program Files\NetApp\SnapDrive" SVCUSERNAME=domain\username SVCUSERPASSWORD=password SVCCONFIRMUSERPASSWORD=password" SDW_WEBSRV_TCP_PORT=808 SDW_WEBSRV_HTTP_PORT=4098 TRANSPORT_PRT_SELECTION=2 TRANSPORT_PRT_PORT=80 TRANSPORT_PROTOCOL_LOGON_USERNAME=username TRANSPORT_PROTOCOL_LOGON_PASSWORD=password ESXIPADDRESS=IPaddress ESXUSERNAME=username ESXUSERPASSWORD=password ESXCONFIRMUSERPASSWORD=password ADD_WINDOWS_FIREWALL=1"


$SvcCred        = Get-SBCredential -UserName 'domain\username' # This function is in SB-Tools module, if you're using PS 5 use: Install-Module SB-Tools -Force 
#$SvcCred        = Get-Credential -UserName 'domain\username' # Alternatively use the native Get-Credential but you'll need to interactively enter the pwd every time..
$TransportCred  = Get-SBCredential -UserName 'TransportProtocolUserName' # Same thing..
$EsxCred        = Get-SBCredential -UserName 'EsxUserName' 


$myArguments  = ' /s /v"/qn '
$myArguments += 'SILENT_MODE=1 '
$myArguments += '/Li SDInstall.log '
$myArguments += 'LPSM_SERIALNUMBER=1111222233334 '
$myArguments += 'INSTALLDIR=''c:\Program Files\NetApp\SnapDrive\'' '
$myArguments += "SVCUSERNAME=$($SvcCred.UserName) "
$myArguments += "SVCUSERPASSWORD=$($SvcCred.GetNetworkCredential().Password) " 
$myArguments += "SVCCONFIRMUSERPASSWORD=$($SvcCred.GetNetworkCredential().Password) " 
$myArguments += 'SDW_WEBSRV_TCP_PORT=808 '
$myArguments += 'SDW_WEBSRV_HTTP_PORT=4098 '
$myArguments += 'TRANSPORT_PRT_SELECTION=2 '
$myArguments += 'TRANSPORT_PRT_PORT=80 '
$myArguments += "TRANSPORT_PROTOCOL_LOGON_USERNAME=$($TransportCred.UserName) "
$myArguments += "TRANSPORT_PROTOCOL_LOGON_PASSWORD=$($TransportCred.GetNetworkCredential().Password) "
$myArguments += 'ESXIPADDRESS=IPaddress '
$myArguments += "ESXUSERNAME=$($EsxCred.UserName) "
$myArguments += "ESXUSERPASSWORD=$($EsxCred.GetNetworkCredential().Password) "
$myArguments += "ESXCONFIRMUSERPASSWORD=$($EsxCred.GetNetworkCredential().Password) "
$myArguments += 'ADD_WINDOWS_FIREWALL=1"'

& "snapdrive7.0.exe $myArguments"

Would $myArguments be better set as an array ?

$SnapDrive = “snapdrive7.0.exe”

$myArguments = @()
$myArguments += ’ /s /v"/qn ’
$myArguments += 'SILENT_MODE=1 ’
$myArguments += '/Li SDInstall.log ’
$myArguments += 'LPSM_SERIALNUMBER=1111222233334 ’
$myArguments += ‘INSTALLDIR=’‘c:\Program Files\NetApp\SnapDrive'’ ’
$myArguments += "SVCUSERNAME=$($SvcCred.UserName) "
$myArguments += "SVCUSERPASSWORD=$($SvcCred.GetNetworkCredential().Password) "
$myArguments += "SVCCONFIRMUSERPASSWORD=$($SvcCred.GetNetworkCredential().Password) "
$myArguments += 'SDW_WEBSRV_TCP_PORT=808 ’
$myArguments += 'SDW_WEBSRV_HTTP_PORT=4098 ’
$myArguments += 'TRANSPORT_PRT_SELECTION=2 ’
$myArguments += 'TRANSPORT_PRT_PORT=80 ’
$myArguments += "TRANSPORT_PROTOCOL_LOGON_USERNAME=$($TransportCred.UserName) "
$myArguments += "TRANSPORT_PROTOCOL_LOGON_PASSWORD=$($TransportCred.GetNetworkCredential().Password) "
$myArguments += ‘ESXIPADDRESS=IPaddress ’
$myArguments += "ESXUSERNAME=$($EsxCred.UserName) "
$myArguments += "ESXUSERPASSWORD=$($EsxCred.GetNetworkCredential().Password) "
$myArguments += “ESXCONFIRMUSERPASSWORD=$($EsxCred.GetNetworkCredential().Password) "
$myArguments += 'ADD_WINDOWS_FIREWALL=1”’

&$SnapDrive $myArguments

You may have to run each of those as a seperate parameter though.

$SnapDrive = “snapdrive7.0.exe”

$myArguments = ’ /s /v"/qn ’
$myArguments1 = 'SILENT_MODE=1 ’
$myArguments2 = '/Li SDInstall.log ’
$myArguments3 = 'LPSM_SERIALNUMBER=1111222233334 ’
etc
etc

$SnapDrive $myArguments $myArguments1 $myArguments2 $myArguments3…