Solved

PowerShell Set-StrictMode -Version Latest

Posted on 2014-01-08
3
526 Views
Last Modified: 2014-01-12
I've just discovered "Set-StrictMode -Version Latest" in Powershell and am wondering how to handle this issue, or is it an issue at all?

$MainQuery= Invoke-Sqlcmd -Query $Query

If the SQL returns more than 1 record then $MainQuery.Count is valid, but if there is only 1 result returned the "Count" property is not valid.

I want to show the number of records:
$TotalRecords = $MainQuery.Count
write-host $TotalRecords

*Also note, that in PS3 Microsoft changed something (forget what it is called) where 0 and 1 are different (no longer numbers unless specified with "@()" ) than numbers 2 and higher. As an example "@(1)" has to be used sometimes or it is seen as not a one, but an object or something. Thought I would mention this because it seems like it might be the same issue here?

Anyway, I guess $MainQuery might be  called a dynamic object because the properties change? Hmmm, maybe it is just the change Microsoft made, but I would still like to know if the code is "OK" or if I should handle it differently?

Does PS 4 have a way to test if a property exist for an object and then if it does I could code it so that if .Count was not available then to set the $TotalRecords = 1 else $TotalRecords = $MainQuery.Count

What are your thoughts?
thanks!
0
Comment
Question by:johnj_01201
3 Comments
 
LVL 39

Accepted Solution

by:
footech earned 500 total points
ID: 39766242
If a query or cmdlet returns multiple objects, saving this to a variable is generally (I hestitate to say "always") an array, and each object is an element of the array.  When only one object is returned, it's generally not an array.  That explains why the .count property is not always available.  You can get around this by forcing the results to be stored in an array, even if there's only one object/element.  Typically you can do this by enclosing the command(s) which return the results within array notation.  So try the below.
$MainQuery= @(Invoke-Sqlcmd -Query $Query)

Open in new window

0
 
LVL 68

Expert Comment

by:Qlemo
ID: 39766737
I'm not aware of a change of handling of 0 and 1 differently in PS3. Probably you mean the handling of (no element), (one element) and (many elements). No element is always something tricky, because it can mean many things, and sometimes needs to be ignored, in other cases not, and such.

As footech elaborated, enclosing results in @(...) will make sure you can treat them as "array" all the time.
0
 
LVL 1

Author Closing Comment

by:johnj_01201
ID: 39775516
Thanks. I'm new to PS and get confused. Your answer is the same (I think) to what I've found a while ago when trying to get IF statements to work when 1 result was returned from invoke-sql.  Based on your explanation, your fix is exactly what I need to do whenever I use invoke-sqlcmd and expect the .count property.

http://connect.microsoft.com/SQLServer/feedback/details/796367/count-property-of-invoke-sqlcmd-result-is-null-when-record-set-contains-exactly-one-record
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

This is a PowerShell web interface I use to manage some task as a network administrator. Clicking an action button on the left frame will display a form in the middle frame to input some data in textboxes, process this data in PowerShell and display…
Synchronize a new Active Directory domain with an existing Office 365 tenant
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

759 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

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now