- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-04-2018 05:58 PM
Hi all,
So I got some assistance from a consultant on this script. Our requirements are to generate a random password, and the password needed to have the following:
- 8 characters
- At least 1 Uppercase
- At least 1 Lowercase
- At least 1 Number
The password is then passed over to our custom powershell activities.
We came up with the below:
var randomNum;
lowerUpperNum = false;
while(!lowerUpperNum) {
randomNum = GlideSecureRandomUtil.getSecureRandomString(8);
if(hasLowerUpperNumCase(randomNum)) {
lowerUpperNum = true;
}
}
current.variables.password = randomNum; //passes string to request item variable
function hasLowerUpperNumCase(_randomNum) {
return (/[a-zA-Z0-9]/.test(_randomNum));
}
It seemed to be working, however, i just got a result without a lowercase: ie this was it 38B9U485.
Anyone know what could be happening, or if there was a better way to meet our requirements?
Cheers,
Brendan
Solved! Go to Solution.
- Labels:
-
Scripting and Coding

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-09-2018 08:30 PM
Try running it with the print enclosed inside of an evaluation of lowerUpperNum
. As you've written it, the password is always printed, even if lowerUpperNum
evaluates as false.
I just tested the following and got 1,000 matches exactly.
for (i=0; i<1000; ){
var lowerUpperNum = false;
while(!lowerUpperNum) {
var password = GlideSecureRandomUtil.getSecureRandomString(8);
lowerUpperNum = !!((password).match(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/));
if(lowerUpperNum) {
gs.print(password);
i++;
}
//current.variables.password = GlideSecureRandomUtil.getSecureRandomString(8);
//lowerUpperNum = !!((current.variables.password).match(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/));
}
}
You could take it a step further and modify it for your application by the following, which guarantees that lowerUpperNum
needs to be truthy before password
is assigned.
var lowerUpperNum = false;
while(!lowerUpperNum) {
var password = GlideSecureRandomUtil.getSecureRandomString(8);
lowerUpperNum = !!((password).match(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/));
if(lowerUpperNum) {
current.variables.password = password;
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-09-2018 10:15 PM
Thanks a lot, that has worked a treat!
I am making baby steps with Java, however, I have a long, long way to go haha

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-09-2018 10:19 PM
Don't worry, we've all had to start somewhere! I'm glad that it worked for you.