{"id":4251,"date":"2009-04-06T14:56:00","date_gmt":"2009-04-06T14:56:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/2009\/04\/06\/checking-for-bound-parameters\/"},"modified":"2019-02-18T13:12:43","modified_gmt":"2019-02-18T20:12:43","slug":"checking-for-bound-parameters","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/checking-for-bound-parameters\/","title":{"rendered":"Checking for bound parameters"},"content":{"rendered":"<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">I recently read an email where someone was asking how they could check in their function if a value had been provided to one of the parameters.<span>&nbsp; <\/span>Consider for example,<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<table class=\"MsoNormalTable\" cellSpacing=\"0\" cellPadding=\"0\" border=\"0\">\n<tbody>\n<tr>\n<td class=\"\" vAlign=\"top\">\n<p class=\"MsoNormal\"><span>001<br \/>002<br \/>003<br \/>004<br \/>005<br \/>006<br \/>007<br \/>008<\/span><\/p>\n<\/td>\n<td class=\"\" vAlign=\"top\" noWrap>\n<p class=\"MsoNormal\"><span>function<\/span><span>&nbsp;<\/span><span>foo<\/span><span><br \/><span>{<\/span><br \/><span>&nbsp;&nbsp;<\/span><span>param<\/span><span>(<\/span><br \/><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>$x<\/span><br \/><span>&nbsp;&nbsp;)<\/span><br \/><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><br \/><span>&nbsp;&nbsp;<\/span><span>#If $x was given a value do something, else do something else.<\/span><br \/><span>}<\/span> <\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">The usual way I\u2019ve seen people deal this problem is by providing a default value which gets assigned to $x in the case that a value wasn\u2019t provided by the caller and then checking for that value.<span>&nbsp; <\/span><\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<table class=\"MsoNormalTable\" cellSpacing=\"0\" cellPadding=\"0\" border=\"0\">\n<tbody>\n<tr>\n<td class=\"\" vAlign=\"top\">\n<p class=\"MsoNormal\"><span>001<br \/>002<br \/>003<br \/>004<br \/>005<br \/>006<br \/>007<br \/>008<\/span><\/p>\n<\/td>\n<td class=\"\" vAlign=\"top\" noWrap>\n<p class=\"MsoNormal\"><span>function<\/span><span>&nbsp;<\/span><span>foo<\/span><span><br \/><span>{<\/span><br \/><span>&nbsp;&nbsp;<\/span><span>param<\/span><span>(<\/span><br \/><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>$x<\/span><span>&nbsp;<\/span><span>=<\/span><span>&nbsp;<\/span><span>$null<\/span><br \/><span>&nbsp;&nbsp;)<\/span><br \/><span>&nbsp;&nbsp;<\/span><br \/><span>&nbsp;&nbsp;<\/span><span># Check for $x being null.<\/span><br \/><span>}<\/span> <\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">That works in the majority of cases, but let\u2019s say that you wanted to differentiate between a default $null value and $null being passed by the caller.<span>&nbsp; <\/span>What would you do?<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">If you\u2019re on v2, a simple solution is to look at $PSBoundParameters.<span>&nbsp; <\/span>It\u2019s a hashtable containing the parameters that were bound and what values were bound to them.<span>&nbsp; <\/span>Try this:<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<table class=\"MsoNormalTable\" cellSpacing=\"0\" cellPadding=\"0\" border=\"0\">\n<tbody>\n<tr>\n<td class=\"\" vAlign=\"top\">\n<p class=\"MsoNormal\"><span>001<br \/>002<br \/>003<br \/>004<br \/>005<br \/>006<br \/>007<br \/>008<br \/>009<\/span><\/p>\n<\/td>\n<td class=\"\" vAlign=\"top\" noWrap>\n<p class=\"MsoNormal\"><span>function<\/span><span>&nbsp;<\/span><span>foo<\/span><span><br \/><span>{<\/span><br \/><span>&nbsp;&nbsp;<\/span><span>param<\/span><span>(<\/span><br \/><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>$x<\/span><span>,<\/span><br \/><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>$y<\/span><br \/><span>&nbsp;&nbsp;)<\/span><br \/><span>&nbsp;&nbsp;<\/span><br \/><span>&nbsp;&nbsp;<\/span><span>$PSBoundParameters<\/span><br \/><span>}<\/span> <\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>PS &gt;foo 1<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>Key<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Value<\/span><\/p>\n<p class=\"MsoNormal\"><span>&#8212;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8211;<\/span><\/p>\n<p class=\"MsoNormal\"><span>x<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>1<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>PS &gt;foo 1 &#8216;foo&#8217;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>Key<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Value<\/span><\/p>\n<p class=\"MsoNormal\"><span>&#8212;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>&#8212;&#8211;<\/span><\/p>\n<p class=\"MsoNormal\"><span>x<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>1<\/span><\/p>\n<p class=\"MsoNormal\"><span>y<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>foo<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">With $PSBoundParameters containing all the bound parameters, to check if a parameter was given a value, it\u2019s a simple matter of checking if $PSBoundParameters contains a key for it.<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<table class=\"MsoNormalTable\" cellSpacing=\"0\" cellPadding=\"0\" border=\"0\">\n<tbody>\n<tr>\n<td class=\"\" vAlign=\"top\">\n<p class=\"MsoNormal\"><span>001<br \/>002<br \/>003<br \/>004<br \/>005<br \/>006<br \/>007<br \/>008<br \/>009<br \/>010<br \/>011<br \/>012<br \/>013<br \/>014<br \/>015<\/span><\/p>\n<\/td>\n<td class=\"\" vAlign=\"top\" noWrap>\n<p class=\"MsoNormal\"><span><\/p>\n<p><span>function<\/span><span>&nbsp;<\/span><span>foo<\/span><br \/><span>{<\/span><br \/><span>&nbsp;&nbsp;<\/span><span>param<\/span><span>(<\/span><br \/><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>$x<\/span><br \/><span>&nbsp;&nbsp;)<\/span><br \/><span>&nbsp;&nbsp;<\/span><br \/><span>&nbsp;&nbsp;<\/span><span>if<\/span><span>&nbsp;(<\/span><span>$PSBoundParameters<\/span><span>.<\/span><span>ContainsKey(<\/span><span>&#8216;x&#8217;<\/span><span>))<\/span><br \/><span>&nbsp;&nbsp;{<\/span><br \/><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>write-host<\/span><span>&nbsp;<\/span><span>&#8216;X Bound!&#8217;<\/span><br \/><span>&nbsp;&nbsp;}<\/span><br \/><span>}<\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">&#8211; Marcel Ortiz Soto [MSFT]<span><\/span><\/font><\/font><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I recently read an email where someone was asking how they could check in their function if a value had been provided to one of the parameters.&nbsp; Consider for example, &nbsp; 001002003004005006007008 function&nbsp;foo{&nbsp;&nbsp;param(&nbsp;&nbsp;&nbsp;&nbsp;$x&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#If $x was given a value do something, else do something else.} &nbsp; The usual way I\u2019ve seen people deal this problem is [&hellip;]<\/p>\n","protected":false},"author":600,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4251","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell"],"acf":[],"blog_post_summary":"<p>I recently read an email where someone was asking how they could check in their function if a value had been provided to one of the parameters.&nbsp; Consider for example, &nbsp; 001002003004005006007008 function&nbsp;foo{&nbsp;&nbsp;param(&nbsp;&nbsp;&nbsp;&nbsp;$x&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#If $x was given a value do something, else do something else.} &nbsp; The usual way I\u2019ve seen people deal this problem is [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/4251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=4251"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/4251\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=4251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=4251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=4251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}