whenever I run this below it gives the output but it also gives an error if I did not enter in a direcotry. Any idea how I can “hide” the error message that comes?
Checking Directory Count
Read-Host : An error of type “System.Management.Automation.Host.PromptingException” has occurred.
At C:\Users\lara\AppData\Local\Temp\5820c1b7-ee6c-47f1-9a6c-06de6dc9e68f.ps1:2 char:20
+ $Source = Read-Host <<<< “Please enter first directory to check”
+ CategoryInfo : ResourceUnavailable: (:) [Read-Host], PromptingException
+ FullyQualifiedErrorId : System.Management.Automation.Host.PromptingException,Microsoft.PowerShell.Commands.ReadHostCommand
Write-Host "Checking Directory Count" -ErrorAction SilentlyContinue
$Source = Read-Host "Please enter first directory to check"
If($Source)
{
Write-host "There are " (Get-ChildItem $Source).Count "items in the ""$Source"" directory"
}
Else
{
Write-Host "Please enter a directory"
}
Update:
Thanks for all the help. I basically want to merge what I have below into another script that does folder comparision. I need to know how many files are in the directory I want to check and also the files that do not exist. I have the below code – I know it is really badly written! I just was not too sure how to get the $source and $target into the same IF statment so ended up making a basic mistake of having two IF statements!
Also – is there a way of instead of showing => and <= that I show “does not exist in $source” or “does not exists in $target” – I will be sending this code to another team and do not want to confuse them too much:
Write-Host "Checking Directory Count and Folder comparision" -ErrorAction SilentlyContinue
$Source = Read-Host "Please enter Source directory to check"
$Target = Read-Host "Please enter Target directory to check"
$child1 = Get-ChildItem -Path $Source
$child2 = Get-ChildItem -Path $Target
Compare-Object $child1 -DifferenceObject $child2
Write-Host ""
If($source -and (Test-Path -Path $source -PathType Container))
{
"There are $(@(Get-ChildItem $Source).Count) items in the '$Source' directory"
}
Else
{
Write-Host "Please enter a directory"
}
If($source -and (Test-Path -Path $Target -PathType Container))
{
"There are $(@(Get-ChildItem $Target).Count) items in the '$Target' directory"
}
Else
{
Write-Host "Please enter a directory"
}
Write-Host ""
Write-Host "Any symbols with '<=' mean that the file Does NOT exist in TARGET"
Write-Host "Any symbols with '=>' mean that the file Does NOT exist in SOURCE"
I suggest you first test if the entered path exists before you try to list its content. I would also cast the result to an array, if the result of use Get-ChildItem is a scalar (one object only) it won’t have a count property :
UPADTE:
I didn’t test the code but you need to reorder the commands. Also, do the compare on the Name property: