I am trying filter by the name of each share using $Share.Name
. However, when I try to use -contains
in the if
statement below, I get no results.
The result I want should be
ADMIN$ - C:\ADMIN$
I am working my way to being able to have a variable like:
$ExcludeShares = "ADMIN$"
and filtering based on if the $String.Name
is in $ExcludeShares
I am open to ideas on other ways to filter this.
Thanks in advance!
function GetAllUsedShares{
[psobject]$Shares = Get-WmiObject -Class win32_share
Foreach($Share in $Shares){
$name = [string]$Share.Name
if ($name -contains 'admin'){
Write-Host $Share.Name - $Share.Path
}
}
}
If you are testing
$name
for exactly 'admin' you can use the-eq
comparator. This checks if the contents of $name equal the contents of your specified string 'admin'You can do this in one line:
Don't forget the asterisks in the where statement. It looks for exact values in that case.
If you want to write it out, this does the same thing:
Contains is meant to work against arrays. Consider the following examples
If you are looking to see if a string contains a text pattern then you have a few options. The first 2 would be
-match
operator or the.Contains()
string method-match
would be one of the simpler examples to use in and If statement. Note:-Match
supports .Net regular expressions so be sure you don't put in any special characters as you might not get the results you expect.-match
is not case sensitive by default so the first example above returns True. The second example is looking to match any character which is what.
represents in regex which is why it returns True as well..Contains()
:-match
is great but for simple strings you can ....Note that
.Contains()
is case sensitive