I have been working on a function to convert the output of NET SHARE <sharename> commands into usable PowerShell objects. In the course of my work, I was storing the output of the command in a variable, which I later pass into a parsing function. Curiously, the function I developed iteratively in the console worked fine, but when I dressed it up in my script, it failed:
test-array : Cannot bind argument to parameter 'foo' because it is an empty string.
At line:1 char:12
+ test-array $party
+ ~~~~~~
+ CategoryInfo : InvalidData: (:) [test-array], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,test-array
I had verified that the variable was of type System.Array, and that it had string elements. After banging my head on it for a while, I decided to break out the parameter handling and test it separately. I wrote a quick function to accept and process the elements of a string array:
function test-array {
param( [string[]] $foo )
$i = 0
foreach ( $line in $foo ) {
write "[$i] $line"
$i++
}
}
When I created an array of strings and passed it into the function, it performed as expected:
PS Z:\> $party = 'cleric','fighter','rogue','wizard' PS Z:\> test-array $party [0] cleric [1] fighter [2] rogue [3] wizard
The error message describes an inability to bind an empty string, so I added a empty string value to my array and tried again:
PS Z:\> $party = 'cleric','fighter','','rogue','wizard' PS Z:\> test-array $party [0] cleric [1] fighter [2] rogue [3] [4] wizard
So passing an array of strings to a function works fine. Then I added the mandatory parameter property to the function definition:
function test-array {
param( [parameter(Mandatory=$true)] [string[]] $foo )
$i = 0
foreach ( $line in $foo ) {
write "[$i] $line"
$i++
}
}
Running the test with the same array elements as before elicited the error seen previously:
PS Z:\> $party
cleric
fighter
rogue
wizard
PS Z:\> test-array $party
test-array : Cannot bind argument to parameter 'foo' because it is an empty string.
At line:1 char:11
+ test-array <<<< $party
+ CategoryInfo : InvalidData: (:) [test-array], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,test-array
Since the output of the NET SHARE <sharename> command includes blank lines, I’ll have to forego including the mandatory parameter property.