Solved

powershell joinging strings without a space

Posted on 2014-11-16
13
177 Views
Last Modified: 2014-11-16
Hi, I am still learning PowerShell and attempting to resolve a problem I found when exploring the functionality of the ForEach-Object Cmdlet. When I attempt to join the 2 variables a space appears in between them and I can't seem to get rid of it no matter what I try. I think its something to do with the Output field separator but after trying several different tactics to change it I am at a loss. I have noticed if I use a txt file instead of a .csv & Get-Content the problem does not occur but using .txt files would limit the use's I am envisioning for ForEach-Object. Can anyone offer a solution preferably with an explanation of why and how to manipulate variables in the loop? thanks in advance

$var1 = Import-Csv -Path D:\Book1.csv
$Ending = "@Domain.com"
$Var1 | ForEach-Object {
Write-Host $_.Name,$Ending
}
0
Comment
Question by:Dead_Eyes
  • 6
  • 5
  • 2
13 Comments
 
LVL 18

Expert Comment

by:Raheman M. Abdul
ID: 40446042
use the following instead: ( 2 single quotes with no space in between)

write-host $_.Name,$Ending -Separator ''
0
 
LVL 37

Accepted Solution

by:
Neil Russell earned 500 total points
ID: 40446059
Easier still is to use write-host "$($_,name)$ending"
0
 

Author Comment

by:Dead_Eyes
ID: 40446083
Hi, thanks for the quick response unfortunately both suggestions did not work and just errored out :(
0
Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

 
LVL 37

Expert Comment

by:Neil Russell
ID: 40446085
Sorry, a TYPO in mine.

write-host "$($_.name)$ending"

. not ,
0
 

Author Comment

by:Dead_Eyes
ID: 40446088
Sorry take that back I just made a school boy syntax error. Thanks for the response's. Neilsr I like your phrasing but  Raheman Mohammed Abdul's answer looks far more easy to understand when learning. Could you point me to the how and why of your syntax? thanks
0
 
LVL 37

Expert Comment

by:Neil Russell
ID: 40446098
OK, using $variables inside a string is normally just a case of doing "$variablename" and the contents of the variable will be used in the string.

However when you are using an object property, i.e.  $_.name ,  where $_ is an object and .name is a property of the object, you need to use the "$($variable.property)" method.  the $() around the variable and property just instruct powershell to treat the contents between the $(  and the  )  as a whole variable expression.

Without the $() around it, "$variable.property"  would be evaluated as $variable followed by the litteral text of ".property"

Hope thats clear?
0
 

Author Comment

by:Dead_Eyes
ID: 40446101
Sorry and finally would this work in a loop like this:
$var1 = Import-Csv -Path D:\Book1.csv
$Ending = "@Domain.com"
$Var1 | ForEach-Object {
New-ADUser -Name $_.Name -UserPrincipalName $_.Name,$Ending -Separator ''
}
# Or using the 2nd example
$var1 = Import-Csv -Path D:\Book1.csv
$Ending = "@Domain.com"
$Var1 | ForEach-Object {
New-ADUser -Name $_.Name -UserPrincipalName "$($_.name)$ending"
}
0
 
LVL 37

Expert Comment

by:Neil Russell
ID: 40446112
The first would not no but the second yes.
0
 
LVL 37

Expert Comment

by:Neil Russell
ID: 40446116
Once you understand the concept of using "$($var.prop)" you can build complex strings quick and easily.
0
 

Author Comment

by:Dead_Eyes
ID: 40446120
Thanks for the great explanation and the extra help Neilsr. I am getting it now
0
 
LVL 37

Expert Comment

by:Neil Russell
ID: 40446127
You could have an object called $User with properties of firstname, lastname and Domain for example and the email address would be.....

"$($User.firstname).$($User.lastname)@$($User.Domain)"

The . and the @ between the $($) pairs are literal chars so will get, for example.

Fred.Blogs@SomeDomain.com
0
 
LVL 18

Expert Comment

by:Raheman M. Abdul
ID: 40446162
Oops zero points even I posted the correct answer and the first one to post
0
 

Author Comment

by:Dead_Eyes
ID: 40446167
Sorry Raheman I know your answer was correct but Neilsr really went the extra mile with a great explanation and his way is far more flexible
0

Featured Post

Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
I thought I'd write this up for anyone who has a request to create an anonymous whistle-blower-type submission form created using SharePoint 2010 (this would probably work the same for 2013). It's not 100% fool-proof but it's as close as you can get…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question