Powershell function returning an array instead of string
up vote
2
down vote
favorite
i'm importing a csv and i would like to add a column to it (with the result based off of the previous columns)
my data looks like this
host address,host prefix,site
10.1.1.0,24,400-01
i would like to add a column called "sub site"
so I wrote this module but the problem is, the actual ending object is an array instead of string
function site {
Param($s)
$s -match '(ddd)'
return $Matches[0]
}
$csv = import-csv $file | select-object *,@{Name='Sub Site';expression= {site $_.site}}
if I run the command
PS C:>$csv[0]
Host Address :10.1.1.0
host prefix :24
site :400-01
sub site : {True,400}
when it should look like
PS C:>$csv[0]
Host Address :10.1.1.0
host prefix :24
site :400-01
sub site : 400
EDIT: I found the solution but the question is now WHY.
If I change my function to $s -match "ddd" |out-null
I get back the expected 400
powershell
add a comment |
up vote
2
down vote
favorite
i'm importing a csv and i would like to add a column to it (with the result based off of the previous columns)
my data looks like this
host address,host prefix,site
10.1.1.0,24,400-01
i would like to add a column called "sub site"
so I wrote this module but the problem is, the actual ending object is an array instead of string
function site {
Param($s)
$s -match '(ddd)'
return $Matches[0]
}
$csv = import-csv $file | select-object *,@{Name='Sub Site';expression= {site $_.site}}
if I run the command
PS C:>$csv[0]
Host Address :10.1.1.0
host prefix :24
site :400-01
sub site : {True,400}
when it should look like
PS C:>$csv[0]
Host Address :10.1.1.0
host prefix :24
site :400-01
sub site : 400
EDIT: I found the solution but the question is now WHY.
If I change my function to $s -match "ddd" |out-null
I get back the expected 400
powershell
2
The$s -match '(ddd)'
outputs True. That gets passed to the pipeline if you do not suppress it.
– Lieven Keersmaekers
Nov 7 at 7:47
2
and fwiw - if you subsite is always 3 characters like your regex shows, following woud do without the need of an extra function*,@{Name='Sub Site';expression= {$_.site.SubString(0,3)}}
– Lieven Keersmaekers
Nov 7 at 7:50
thanks, great idea. However my case is a bit more complicated then I actually posted so it isn't always at the front!
– genx1mx6
Nov 8 at 8:22
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
i'm importing a csv and i would like to add a column to it (with the result based off of the previous columns)
my data looks like this
host address,host prefix,site
10.1.1.0,24,400-01
i would like to add a column called "sub site"
so I wrote this module but the problem is, the actual ending object is an array instead of string
function site {
Param($s)
$s -match '(ddd)'
return $Matches[0]
}
$csv = import-csv $file | select-object *,@{Name='Sub Site';expression= {site $_.site}}
if I run the command
PS C:>$csv[0]
Host Address :10.1.1.0
host prefix :24
site :400-01
sub site : {True,400}
when it should look like
PS C:>$csv[0]
Host Address :10.1.1.0
host prefix :24
site :400-01
sub site : 400
EDIT: I found the solution but the question is now WHY.
If I change my function to $s -match "ddd" |out-null
I get back the expected 400
powershell
i'm importing a csv and i would like to add a column to it (with the result based off of the previous columns)
my data looks like this
host address,host prefix,site
10.1.1.0,24,400-01
i would like to add a column called "sub site"
so I wrote this module but the problem is, the actual ending object is an array instead of string
function site {
Param($s)
$s -match '(ddd)'
return $Matches[0]
}
$csv = import-csv $file | select-object *,@{Name='Sub Site';expression= {site $_.site}}
if I run the command
PS C:>$csv[0]
Host Address :10.1.1.0
host prefix :24
site :400-01
sub site : {True,400}
when it should look like
PS C:>$csv[0]
Host Address :10.1.1.0
host prefix :24
site :400-01
sub site : 400
EDIT: I found the solution but the question is now WHY.
If I change my function to $s -match "ddd" |out-null
I get back the expected 400
powershell
powershell
edited Nov 7 at 7:45
asked Nov 7 at 7:36
genx1mx6
14528
14528
2
The$s -match '(ddd)'
outputs True. That gets passed to the pipeline if you do not suppress it.
– Lieven Keersmaekers
Nov 7 at 7:47
2
and fwiw - if you subsite is always 3 characters like your regex shows, following woud do without the need of an extra function*,@{Name='Sub Site';expression= {$_.site.SubString(0,3)}}
– Lieven Keersmaekers
Nov 7 at 7:50
thanks, great idea. However my case is a bit more complicated then I actually posted so it isn't always at the front!
– genx1mx6
Nov 8 at 8:22
add a comment |
2
The$s -match '(ddd)'
outputs True. That gets passed to the pipeline if you do not suppress it.
– Lieven Keersmaekers
Nov 7 at 7:47
2
and fwiw - if you subsite is always 3 characters like your regex shows, following woud do without the need of an extra function*,@{Name='Sub Site';expression= {$_.site.SubString(0,3)}}
– Lieven Keersmaekers
Nov 7 at 7:50
thanks, great idea. However my case is a bit more complicated then I actually posted so it isn't always at the front!
– genx1mx6
Nov 8 at 8:22
2
2
The
$s -match '(ddd)'
outputs True. That gets passed to the pipeline if you do not suppress it.– Lieven Keersmaekers
Nov 7 at 7:47
The
$s -match '(ddd)'
outputs True. That gets passed to the pipeline if you do not suppress it.– Lieven Keersmaekers
Nov 7 at 7:47
2
2
and fwiw - if you subsite is always 3 characters like your regex shows, following woud do without the need of an extra function
*,@{Name='Sub Site';expression= {$_.site.SubString(0,3)}}
– Lieven Keersmaekers
Nov 7 at 7:50
and fwiw - if you subsite is always 3 characters like your regex shows, following woud do without the need of an extra function
*,@{Name='Sub Site';expression= {$_.site.SubString(0,3)}}
– Lieven Keersmaekers
Nov 7 at 7:50
thanks, great idea. However my case is a bit more complicated then I actually posted so it isn't always at the front!
– genx1mx6
Nov 8 at 8:22
thanks, great idea. However my case is a bit more complicated then I actually posted so it isn't always at the front!
– genx1mx6
Nov 8 at 8:22
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
Good you found the answer. I was typing this up as you found it. The reason is because the -match
returns a value and it is added to the pipeline, which is all "returned" from the function.
For example, run this one line and see what is does:
"Hello" -match 'h'
It prints True
.
Since I had this typed up, here is another way to phrase your question with the fix...
function site {
Param($s)
$null = $s -match '(ddd)'
$ret = $Matches[0]
return $ret
}
$csv = @"
host address,host prefix,site
10.1.1.1,24,400-01
10.1.1.2,24,500-02
10.1.1.3,24,600-03
"@
$data = $csv | ConvertFrom-Csv
'1 =============='
$data | ft -AutoSize
$data2 = $data | select-object *,@{Name='Sub Site';expression= {site $_.site}}
'2 =============='
$data2 | ft -AutoSize
Thanks, I also thought of another way and that's to take the last index of the array that gets returned sosite $($_.site)[-1]
However I think I like your solution more since you aren't guaranteed to get an array back from every function.
– genx1mx6
Nov 8 at 8:21
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
Good you found the answer. I was typing this up as you found it. The reason is because the -match
returns a value and it is added to the pipeline, which is all "returned" from the function.
For example, run this one line and see what is does:
"Hello" -match 'h'
It prints True
.
Since I had this typed up, here is another way to phrase your question with the fix...
function site {
Param($s)
$null = $s -match '(ddd)'
$ret = $Matches[0]
return $ret
}
$csv = @"
host address,host prefix,site
10.1.1.1,24,400-01
10.1.1.2,24,500-02
10.1.1.3,24,600-03
"@
$data = $csv | ConvertFrom-Csv
'1 =============='
$data | ft -AutoSize
$data2 = $data | select-object *,@{Name='Sub Site';expression= {site $_.site}}
'2 =============='
$data2 | ft -AutoSize
Thanks, I also thought of another way and that's to take the last index of the array that gets returned sosite $($_.site)[-1]
However I think I like your solution more since you aren't guaranteed to get an array back from every function.
– genx1mx6
Nov 8 at 8:21
add a comment |
up vote
1
down vote
accepted
Good you found the answer. I was typing this up as you found it. The reason is because the -match
returns a value and it is added to the pipeline, which is all "returned" from the function.
For example, run this one line and see what is does:
"Hello" -match 'h'
It prints True
.
Since I had this typed up, here is another way to phrase your question with the fix...
function site {
Param($s)
$null = $s -match '(ddd)'
$ret = $Matches[0]
return $ret
}
$csv = @"
host address,host prefix,site
10.1.1.1,24,400-01
10.1.1.2,24,500-02
10.1.1.3,24,600-03
"@
$data = $csv | ConvertFrom-Csv
'1 =============='
$data | ft -AutoSize
$data2 = $data | select-object *,@{Name='Sub Site';expression= {site $_.site}}
'2 =============='
$data2 | ft -AutoSize
Thanks, I also thought of another way and that's to take the last index of the array that gets returned sosite $($_.site)[-1]
However I think I like your solution more since you aren't guaranteed to get an array back from every function.
– genx1mx6
Nov 8 at 8:21
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
Good you found the answer. I was typing this up as you found it. The reason is because the -match
returns a value and it is added to the pipeline, which is all "returned" from the function.
For example, run this one line and see what is does:
"Hello" -match 'h'
It prints True
.
Since I had this typed up, here is another way to phrase your question with the fix...
function site {
Param($s)
$null = $s -match '(ddd)'
$ret = $Matches[0]
return $ret
}
$csv = @"
host address,host prefix,site
10.1.1.1,24,400-01
10.1.1.2,24,500-02
10.1.1.3,24,600-03
"@
$data = $csv | ConvertFrom-Csv
'1 =============='
$data | ft -AutoSize
$data2 = $data | select-object *,@{Name='Sub Site';expression= {site $_.site}}
'2 =============='
$data2 | ft -AutoSize
Good you found the answer. I was typing this up as you found it. The reason is because the -match
returns a value and it is added to the pipeline, which is all "returned" from the function.
For example, run this one line and see what is does:
"Hello" -match 'h'
It prints True
.
Since I had this typed up, here is another way to phrase your question with the fix...
function site {
Param($s)
$null = $s -match '(ddd)'
$ret = $Matches[0]
return $ret
}
$csv = @"
host address,host prefix,site
10.1.1.1,24,400-01
10.1.1.2,24,500-02
10.1.1.3,24,600-03
"@
$data = $csv | ConvertFrom-Csv
'1 =============='
$data | ft -AutoSize
$data2 = $data | select-object *,@{Name='Sub Site';expression= {site $_.site}}
'2 =============='
$data2 | ft -AutoSize
answered Nov 7 at 7:51
Kory Gill
4,8711824
4,8711824
Thanks, I also thought of another way and that's to take the last index of the array that gets returned sosite $($_.site)[-1]
However I think I like your solution more since you aren't guaranteed to get an array back from every function.
– genx1mx6
Nov 8 at 8:21
add a comment |
Thanks, I also thought of another way and that's to take the last index of the array that gets returned sosite $($_.site)[-1]
However I think I like your solution more since you aren't guaranteed to get an array back from every function.
– genx1mx6
Nov 8 at 8:21
Thanks, I also thought of another way and that's to take the last index of the array that gets returned so
site $($_.site)[-1]
However I think I like your solution more since you aren't guaranteed to get an array back from every function.– genx1mx6
Nov 8 at 8:21
Thanks, I also thought of another way and that's to take the last index of the array that gets returned so
site $($_.site)[-1]
However I think I like your solution more since you aren't guaranteed to get an array back from every function.– genx1mx6
Nov 8 at 8:21
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53185186%2fpowershell-function-returning-an-array-instead-of-string%23new-answer', 'question_page');
}
);
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
2
The
$s -match '(ddd)'
outputs True. That gets passed to the pipeline if you do not suppress it.– Lieven Keersmaekers
Nov 7 at 7:47
2
and fwiw - if you subsite is always 3 characters like your regex shows, following woud do without the need of an extra function
*,@{Name='Sub Site';expression= {$_.site.SubString(0,3)}}
– Lieven Keersmaekers
Nov 7 at 7:50
thanks, great idea. However my case is a bit more complicated then I actually posted so it isn't always at the front!
– genx1mx6
Nov 8 at 8:22