You should use multi-line string literal i.e. verbatim string:
MySiteScript = String.Format(@"$mysiteHostUrl ...
...
...$mysite.Dispose()", mySiteHostUrl, sAMAccountName);
Note – you can’t use backslash escaping for double quotes in verbatim string. Use quote-escape-sequence (two consecutive double-quote characters). Complete sample:
dMySiteScript = String.Format(@"$mysiteHostUrl = ""{0}"";
$personalSiteGlobalAdminDisplayName = ""SharePoint Admin"";
$mysite = Get-SPSite $mysiteHostUrl;
$context = [Microsoft.Office.Server.ServerContext]::GetContext($mysite);
$upm = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context);
$AllProfiles = $upm.GetEnumerator(); foreach($profile in $AllProfiles) {{$DisplayName = $profile.DisplayName;
$AccountName = $profile[[Microsoft.Office.Server.UserProfiles.PropertyConstants]::AccountName].Value;
if($AccountName -like ""{1}"")
{{
if($profile.PersonalSite -eq $Null) {{ $profile.CreatePersonalSite();
}} else {{
Write-Host ""Personal site already exists."" ; }}
}} else {{
Write-Host ""User not found.""; }}
}} $mysite.Dispose()", mySiteHostUrl, sAMAccountName);